1:概述
有些C语言的声明确实让人很迷惑阿,到底哪个对哪个错呢?
2:奇怪的函数声明
- 函数返回值: 不能是函数,可以是函数指针 例: int (* fun()) ()
- 函数返回值: 不能是数组,可以是指向数组的指针 例: int (* foo()) []
- 数组内部 : 不能有函数,可以有函数指针 例: int (* foo[]) ()
3:结构的声明
struct 结构标签 {
类型1 标示符1;
类型2 标示符2;
类型3 标示符3;
}变量定义;
其中结构标签和变量定义都是可选的。
结构中也允许存在位段(必须是int, unsigned int或 signed int)、无名字段以及填充字段。例:
- struct pid_tag {
-
unsigned int inactive : 1;
-
unsigned int : 1;
-
unsigned int refcount : 6;
-
unsigned int : 0;
-
short pid_id;
-
struct pid_tag *link;
-
};
4:联合的声明
union 结构标签 {
类型1 标示符1;
类型2 标示符2;
类型3 标示符3;
}变量定义;
其中结构标签和变量定义都是可选的。和struct类似。
联合又称变体记录:所有的成员都从偏移地址零开始存储,每个成员的位置都重叠在一起,在某一时刻,
只有一个成员正存储于该地址。
联合一般作为大型结构的一部分存在,用来节省空间。
联合还可以把同一个数据解释成两种不同的东西。
- union bits32_tag {
-
int whole;
-
struct {char c0, c1, c2, c3;}byte;
-
} value;
5:枚举
enum 结构标签 {内容} 变量定义;
其中结构标签和变量定义都是可选的,和struct类似。
枚举可以把一串名字与一串整形值联系在一起,整形值从0开始,如果列表中某一个标示符有赋值,
那么紧跟其后的那个标示符的值比它大1,不想#define那样,枚举在调试器中也是可见的。
- enum weekly {mon = 1, tue, wen, thi, fri, sat, sun} w;
阅读(1952) | 评论(0) | 转发(1) |