摘要
此次文为面试时被面试官提问到的常见C语言知识
<1>问 : 结构体和联合体的区别有什么?
答:结构体内存大小为结构内各变量大小之和,同时还与变量排列顺序有关因为涉及到内存管理,联合体内存大小等于联合体内所占内存最大的变量,联合体经典用法为合并数据例如将四个char 类型变量合并为一个int类型数据。
<2>问: 链表和数组的的常见用处及其区别 ?
答:链表与数组都可以原来存放数据节点,不同之处如下
链表: 其优点在于可以根据需要动态申请内存后存放数据,使得内存物尽其用,其其缺点在于操作复杂,内存必须及时释放,否则会造成内存泄漏。
数组: 其优点在于操作简单方便,缺点在于必须事先定义数组大小,事后无法更改,会造成内存的浪费或者不足。
<3>问: 在C语言中单#号与双#的作用及其用法?
答:单#号时做宏定义=》将宏参数进行字符串操作,等同于在宏参数在编译时就地展开为字符串。
双#号时作连接使用=》将前后字母连接为一体。
例子:#define show(NAME) printf("linux"#NAME"=%d\n,P##NAME)
定义变量: int P25=8421;
调用时 : show(25);
编译时宏展开为: printf("linux"#25"=%d\r\n",P##25);
其中#25=="25" P##25====P25
printf("linux""25""=%d\n",P25);
printf("linux25=%d\n",P25); ===> linux25=8421;
<4>问: 宏定义传参与函数传参各有什么特点?
答: 函数传参时cpu会有相关的栈操作,cpu开销较大,适合于运算量较大的参数传参,而宏定义则简单高效没有栈操作,适合于运算量较小的传参。
<5>问: sizeof是不是函数,其如何数组计算大小
答:sizeof不是函数时,它是一个操作符,
通过sizeof传入数组名得到整个数组所占内存大小,之后通过sizeof传入单个数组变量得到单个数组变量大小两者相除便可到数组大小
例子int array[10]; int strlen;
strlen=sizeof(array)/sizeof(array[0]);由此得到数组大小。
注:问题解答为博主自身见解,存在不足之处,甚至存在错误,仅供参考!!!!!。