首页 > 编程语言 >C/C++学习(10)关于数组、内联函数、虚函数的错题集锦

C/C++学习(10)关于数组、内联函数、虚函数的错题集锦

时间:2023-06-13 10:32:07浏览次数:43  
标签:函数 int 集锦 元素 错题 数组 inline 指针


1、顺序存储方式不仅用于存储线性结构,还可以用于存放非线性结构,如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。

 

2、数组名有两重属性:

1)数据结构的一个对象(数据结构为当前数组),在java中数组就是一个对象。

2)某些情况下自动退化成指向第一个元素的常量指针。

 

3、有两个从小到大排好序的数组,长度分别为N和M,将这两个数组合并为一个有序数组,最好的情况是Min(m,n),最差的情况是m+n-1

 

4、int(*p)[4]:p为指向含4个元素的一维整形数组的指针变量(是指针)

    int *p[4]:定义指针数组p,它由4个指向整形数据的指针元素组成(是数组)

    int(*)[4]:可以看作是一种数据类型,也就是第一个 int(*p)[4]

 

5、三对角矩阵:只有对角线上以及对角线的两侧有值,其余元素为0.

                                    

C/C++学习(10)关于数组、内联函数、虚函数的错题集锦_静态成员

 

 

6、稀疏矩阵(行,列,元素)  转置→稀疏矩阵(列,行,元素)

 

7、一个5*4的矩阵,有多少长方形?(正方形也算是长方形)

思路:长任取两个点C(6,2),宽任取2个点C(5,2),相乘得到 150、

 

8、静态数据成员可以直接用类名调用;

静态成员属于类,而不是属于某个特定的对象,它是由该类的所有对象共享的,因此不能在类的构造方法中初始化;

静态成员属于该类所有对象共有,可以被类对象调用;

静态成员受private的限制;静态成员属于类和该类的所有对象,可以用类名直接调用;

静态成员需在类外初始化(除非是const类型),且共享,不依赖于对象,不存在this指针。

 

9、运行Test函数会是“未定义行为”的结果。


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void Test(void) {
       char *str=(char *)malloc(100);
       strcpy(str,"hello");
       free(str);
       if(str!=NULL) {
              strcpy(str,"world");
              printf("str");
       }
}
int main() {
       Test();
       return 0;
}




分析:野指针。free释放以后按照理论是不能访问的,如果这个时候访问并且往里面输入数据的话系统不能保证数据按照。自己测试的时候可能出现world,但是不代表一直会出现world。

free指针后,再使用不保证正确性。释放了堆空间,在堆空间没有被其他地方修改之前都可以打印,所以不能确定。

野指针:指向一个已经删除的对象或未申请访问受限内存区域的指针,访问内存区域是受限的。

10、


#include<stdio.h>
int main() { 
int a[5]={1,2,3,4,5};
int *ptr=(int*)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}



分析:a代表的是int *,每次步长为一个int;&a代表的是int[]*,每次步长为所指向的数组大小。

数组名的值是一个指针常量,也就是数组第一个元素的地址。*(a+1)等同于a[1],所以*(a+1)=2;

&a+1指向数组最后一个元素的下一个位置,故*(ptr-1)指向数组的最后一个元素,即5;


补充:已知int a[3][4];能够用 *(*(a+1)+2)来表示 a[1][2]; 

 在多维数组中,数组名是第一个数组的地址;注意这里a不是定元素的地址,而是第一个维数组的地址,a[0][0]才是表示的一维数组第一个元素的地址。 

地址+1表示向下移动一层


11、inline关键字的函数只是用户希望它成为内联函数,但编译器有权忽略这个要求;若这个函数体太大,则不会把它作为内联函数展开。

头文件不仅包含inline函数声明,而且必须包含定义,且在定义时必须加上inline。(关键字inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前面不起任何作用)

inline函数可以定义在源文件中,但多个源文件中的同名inline函数实现必须相同。一般inline函数的定义放在头文件中更加合适。

类内的成员函数,默认都是inline的。(定义在类声明中的成员函数将自动地成为内联函数)

 

12、虚函数可以声明为inline;静态函数不可以是虚函数;

13、 

#include<stdlib.h>
#include<stdio.h>
int main()
{
const char str1[]="abc";
const char str2[]="abc";
const char *p1="abc";
const char *p2="abc";
printf("%d %d %d %d\n",str1,str2,p1,p2);
}

输出前前两项不同,输出的后两项相同。

分析:前两个是字符数组,定义在栈上,明显地址不同;字符串常量定义在静态区,仅有一份拷贝,所以后面两个指针指向的地址相同。

若是改成如下的话,就都不相同。


printf("%d %d %d %d\n",str1,str2,&p1,&p2);



标签:函数,int,集锦,元素,错题,数组,inline,指针
From: https://blog.51cto.com/u_14939782/6467639

相关文章

  • 14.拷贝构造函数、静态、友元和预编译头
    拷贝构造函数静态友元预编译头拷贝构造函数eg:Playeer.h代码:#pragmaonceclassPlayeer{private:intnum;char*name;public:Playeer(intx,constchar*name);~Playeer();voiddisplay();//输出结果voidsetX(intx);//......
  • C语言,函数包含失败问题
    1.头文件包含顺序出错导致头文件中的函数无法使用eg:在主函数中调用support.h中的strcat()函数失败,但是明明已经包含了strcat()函数的头文件进来;编译器还是提示“Undefinedsysbolsupport(refreedfromxxx.o)”.以下函数只是简单举例,请不要直接拿来编译main中,先调用了includ......
  • 函数exit,参数 EXIT_FAILURE,参数EXIT_SUCCESS
    1、函数:exit()所在头文件:stdlib.h功能:关闭所有文件,终止正在执行的进程exit(0)表示正常退出exit(x)都表示异常退出,这个x是返回给操作系统的,以供其他程序使用return和exit:无论在哪里使用main都会终止程序,return只是将控制权交给递归的前一级。return和exit的区别......
  • 解压gzip数据流 和 file_get_contents()函数支持SSL错误和header
    file_get_contents()函数的相关参数,支持SSL错误和header $options=array("ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false,), "http"=>array('timeout......
  • 箭头函数this指向
    箭头函数与普通函数的区别1、语法更加简洁清晰2、箭头函数不会创建自己的this箭头函数没有自己的this,它会捕捉自己在定义时所处外层执行环境的this,并继承这个this值。所以箭头函数中this的指向在它被定义的时候就已经确定了,之后不再改变。下面例子中,fun1中setTimeout中使用......
  • 函数、极限与连续
    函数、极限与连续映射:又称为算子,一个非空集合X的元素按某种法则f与另一个非空集合Y的元素对应。在映射f下,y称为x的像,x称为y的原像。集合X称为定义域Df,定义域的元素的像的集合称为值域Rf。也就是说,\(R_f\subsetY\)。映射分为以下三种:单射:一个x对应一个y;满射:Y中任......
  • 【Python入门教程】Python常用表格函数&操作(xlrd、xlwt、openpyxl、xlwings)
    ​        在我们使用Python时,避免不了与Excel打交道。同样Python的三方库和代码的简洁性也为我们处理大数据提供了便利。今天给大家介绍一下常用的处理表格的函数,同时还有一些常用的操作。                这些都是我在使用Python处理Excel时用到的......
  • 箭头函数和普通函数的区别
    一、普通函数存在声明提升1、定义:关键字(function)函数名(参数){//参数是形参(形式参数)函数体returnxxx}2、调用:函数名(参数)//参数是实参(实际参数) 3、形参|实参实参:在调用函数的时候真正传进去要进行运算的值(真实的数据)形参:占位的参数,在封装的函数里面会用到这个形式......
  • mysql函数创建
    文章目录前言一、mysql函数是什么?二、创建函数1.基本语法2.仿照这个写一个自己的函数总结前言mysql函数与存储过程的区别:参数:存储过程对待参数有三种方式:输入(IN),输出(OUT)和输入并输出(INOUT),因为有三种方式所以必须对参数指明其用途;对于存储函数只有一种方式:输入参数,因此不需要写IN......
  • 012 数据库学习笔记--自定义函数
    自定义函数:根据自己的需要,自定义一些函数分类:标量函数、内嵌表值函数、多声明表值函数标量函数:对单一值的操作,返回单一值;包含beginend创建的时候,指定了函数所有体,调用时也必须指定函数所有者调用时,如果函数中指定了默认值,调用的时候,可使用默认值default代替在语法上r......