2.1 这两个声明有什么区别?
struct x1 { ... }; typedef struct { ... } x2;
2.2 为什么不
struct x { ... }; x thestruct;的函数调用是否会工作?
2.3 结构可以包含指向自身的指针吗?
2.4 如何在 C 中实现不透明(抽象)数据类型?
2.4b 有没有一种好的方法可以在 C 中模拟面向对象风格的继承或其他面向对象的功能?
2.5 为什么声明
extern int f(struct x *p);会给我一个关于“struct x 声明在参数列表内”的晦涩的警告消息?
2.6 我遇到了一些代码,它是这样声明结构的
struct name { int namelen; char namestr[1]; };然后进行了一些棘手的分配,使namestr数组表现得好像有几个元素,数量由namelen记录。这如何运作?这是合法的还是可移植的?
2.7 我听说结构可以赋值给变量,也可以传递给函数和从函数返回,但 K&R1 说不行。
2.8 有没有一种自动比较结构的方法?
2.9 结构传递和返回是如何实现的?
2.10 如何将常量值传递给接受结构参数的函数?如何创建无名、即时、常量的结构值?
2.11 如何从/向数据文件中读/写结构?
2.12 为什么我的编译器会在结构中留下空隙,浪费空间并阻止与外部数据文件的“二进制” I/O?我可以关闭它,或者以其他方式控制结构字段的对齐吗?
2.13 为什么sizeof报告的大小比我预期的结构类型要大,好像在末尾有填充?
2.14 如何确定字段在结构中的字节偏移量?
2.15 如何在运行时按名称访问结构字段?
2.16 C 是否有等同于 Pascal 的with语句吗?
2.17 如果数组名像指向数组基址的指针,为什么结构不能实现相同的功能?
2.18 这个程序可以正常工作,但在完成后会崩溃。为什么?
struct list { char *item; struct list *next; } /* Here is the main program. */ main(argc, argv) { ... }
2.19 结构和联合有什么区别?
2.20 我可以初始化联合吗?
2.21 有没有一种自动跟踪联合中哪个字段正在被使用的方法?
2.22 枚举和预处理器集合有什么区别#define有什么区别?
2.23 枚举真的可移植吗?
它们不像 Pascal 吗?
2.24 有没有一种简单的方法可以符号化地打印枚举值?
2.25 我遇到了一些结构声明,其中某些字段旁边有冒号和数字,如下所示
struct record { char *name; int refcount : 4; unsigned dirty : 1; };这是怎么回事?
2.26 人们为什么大量使用显式掩码和位操作代码,而不是声明位字段?