top/contents search

2. 结构、联合和枚举

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 人们为什么大量使用显式掩码和位操作代码,而不是声明位字段?


回到顶部

contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管