《你必须知道的495个C语言问题》笔记
2.12 怎样从/向数据文件读/写结构?
最简单:
fwrite(&somestruct,sizeof somestruct,1,fp);
有fwrite原型:
fwrite((char *)somestruct,sizeof somestruct,1,fp);
可移植性:
写一对函数,按域读写。
2.13 编辑器在内存中留下了空洞?怎么控制对齐方式?
自动内存对齐,不便处理;
最大限度降低影响:把结构中的域按从大到小的顺序排列;
可用位域,但也有缺点。
2.14 为什么sizeof返回的大于结构大小的期望值?尾部有填充?
为了分配时对齐,可能有尾部填充或内部填充,结构不是数组的成员,末尾填充也会保持。
2.15 如何确定域在结构中的字节偏移量?
<stddef.h>中定义了offsetof宏,用offsetof(structs,f)可以计算f在s中的偏移量。
2.16 怎样在运用时用名字访问结构中的域?
创建表,保存名称和用offsetof()计算的域偏移量。
a,b的偏移量offsetb=offsetof(struct a,b)。
2.20 结构和联合有什么区别?
联合本质是一个成员相互重叠的结构,大小是它最大成员的大小,结构是所有的之和。
2.21 初始化联合?
ANSI C中,联合的第一个命名成员可被初始化;
C99引入“指定初始式”?
2.23 枚举和一组预处理的#define有什么不同?
c标准表明枚举为整型,枚举常量为in型。
2.24 有什么显示枚举值符号的方法?
没有。emmm…
自己写函数,将枚举常量映射到字符串;
或通过switch语句;
或通过搜索数组?