C语言面试题之结构体共用体枚举
描述结构体对齐规则
1. 数组成员对齐规则。第一个数组成员应该放在offset为0的地方,以后每个数组成员应该放在offset为min(当前成员的大小,#pargama pack(n))整数倍的地方开始(比如int在32位机器为4字节,#pargama pack(2),那么从2的倍数地方开始存储)。
2. 结构体总的大小,也就是sizeof的结果,必须是min(结构体内部最大成员,#pargama pack(n))的整数倍,不足要补齐。
3. 结构体做为成员的对齐规则。如果一个结构体B里嵌套另一个结构体A,还是以最大成员类型的大小对齐,但是结构体A的起点为A内部最大成员的整数倍的地方。(struct B里存有struct A,A里有char,int,double等成员,那A应该从8的整数倍开始存储。),结构体A中的成员的对齐规则仍满足原则1、原则2。
如何理解结构体的浅拷贝与深拷贝
当结构体中有指针成员的时候容易出现浅拷贝与深拷贝的问题。
浅拷贝就是,两个结构体变量的指针成员指向同一块堆区空间,在各个结构体变量释放的时候会出现多次释放同一段堆区空间
深拷贝就是,让两个结构体变量的指针成员分别指向不同的堆区空间,只是空间内容拷贝一份,这样在各个结构体变量释放的时候就不会出现多次释放同一段堆区空间的问题
描述枚举
关键字enum,将枚举变量将要赋值的值 一一用符号常量(枚举值)列举出来。枚举变量尽量赋值为给定的符号常量(枚举值)
描述共有体
以关键字union修饰,共有体又叫联合体,共有体中的成员共享同一块内存空间。
内存空间总大小由共用体中最大的成员类型决定,每个成员能够操作的空间大小是由成员自身类型大小决定
描述结构体
以关键字struct修饰,结构体中的成员拥有各自独立的空间,按照(结构体对齐规则)存储在内存中
结构体中的成员类型可以不同
结构体与共用体的区别
结构体中的成员拥有独立的空间,共用体的成员共享同一块空间,但是每个共用体成员能访问共用区的空间大小是由成员自身的类型决定
结构体变量初始化时需要注意啥
结构体变量的初始化 必须遵循结构体成员的顺序以及成员的自身类型
谈谈你对结构体数组的理解
结构体数组:本质是数组,数组的每个元素为结构体变量。
谈谈你对结构体位域的理解
在结构体中,以位为单位的成员,咱们称之为位段(位域)
不能对位域取地址
对位域赋值 不要超过 位域本身位的宽度
谈谈你对链表的理解
链表是由一个个节点组成,节点没有名字,每个节点从堆区动态申请,节点间物理上是非连续的,但是每个节点通过指针域 保存下一个节点的位置 达到逻辑上连续
谈谈数组和链表的不同点
数组通过下标能够快速遍历数组的每个元素(访问效率高),但是当数组插入或删除数据时需要移动大量的数据(插入删除效率低)
链表通过指针域逐个节点的访问数据(访问效率低),但是当链表插入或删除节点不需要移动节点(插入删除效率高)
更多关于物联网培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。