C面试常考知识点详解

小结清单:


指针与引用区别与联系

指针与数组的区别与联系

结构体内存对齐


指针与引用区别与联系


联系:


底层实现方式相同,都是按照指针的方式实现。


区别:


(1)引用必须初始化,指针可以不用初始化;

(2)引用一旦定义就不能改变,指针可以改变指向;

(3)sizeof的含义不同:sizeof指针的大小就是指针类型所占的字节数,引用是引用这个变量类型占的字节数;

(4)自增、自减含义不同:指针自增、自减表示位置的改变,引用的自增、自减表示数值的改变;

(5)存在多级指针,不存在多级引用;

(6)没有空引用,但是有空指针;

(7)引用比指针使用起来相对安全;


指针与数组的区别与联系


联系:


(1)指针与数组的关系:当指针变量被初始化成数组名时,该指针变量指向了数组;

(2)指向数组元素的指针:


int a[10];
int *pa;
pa=a;
pa=&a[0];
pa=a;


(3)指针与一维数组:任何由下标可以完成的操作都可以通过指针来实现(指针加偏移量);

(4)指针与多维数组:指向数组元素的指针变量,指向由n个整数组成的一维数组的指针变量;

(5)指针与字符数组:C语言中,字符串操作都是用指针来完成的;


区别:


(1)数组作为函数参数时,会退化为指针,实际上相当于传递的是指针;

(2)数组名可作为指针常量;

(3)数组是开辟一块连续的内存空间,数组本身的标识符代表数组本身,可以用sizeof求大小;

(4)指针只是分配了一个指针大小的内存,并把它的值指向某个有效的内存空间,因此不能在传递指针参数的被调用函数中用sizeof计算数组大小;


结构体内存对齐


引入结构体内存对齐的原因:


(1)不同平台并不是可以访问任何一个空间;

(2)提升访问速度(读写速度);


结构体内存对齐原则:


(1)结构体的第一个成员在结构体变量偏移量为0的地址处;

(2)其他成员变量要对应到对齐数整数倍的地址处;

(3)对齐数为当前机器的最大对齐数与结构体变量最大对齐数的较小值;

(4)结构体的总大小为最大对齐数的整数倍;

(5)如果嵌套了结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是最大对齐数的整数倍;

你可能感兴趣的:(C常见面试题,C语言学习总结)