重温C语言::1::(6)怪怪的声明

2039阅读 0评论2011-07-14 onezeroone
分类:C/C++

1:概述
      有些C语言的声明确实让人很迷惑阿,到底哪个对哪个错呢?

2:奇怪的函数声明
3:结构的声明
     struct 结构标签 {
                类型1    标示符1;
                类型2    标示符2;
                类型3    标示符3;
     }变量定义;

其中结构标签和变量定义都是可选的。

     结构中也允许存在位段(必须是int, unsigned int或 signed int)、无名字段以及填充字段。例:
  1. struct pid_tag {
  2.     unsigned int inactive : 1;
  3.     unsigned int : 1;
  4.     unsigned int refcount : 6;
  5.     unsigned int : 0;
  6.     short pid_id;
  7.     struct pid_tag *link;
  8. };

4:联合的声明
    union 结构标签 {
                类型1    标示符1;
                类型2    标示符2;
                类型3    标示符3;
    }变量定义;
其中结构标签和变量定义都是可选的。和struct类似。
联合又称变体记录:所有的成员都从偏移地址零开始存储,每个成员的位置都重叠在一起,在某一时刻,
只有一个成员正存储于该地址。
联合一般作为大型结构的一部分存在,用来节省空间。
联合还可以把同一个数据解释成两种不同的东西。
  1. union bits32_tag {
  2.     int whole;
  3.     struct {char c0, c1, c2, c3;}byte;
  4. } value;

5:枚举
    enum 结构标签 {内容} 变量定义;
其中结构标签和变量定义都是可选的,和struct类似。
枚举可以把一串名字与一串整形值联系在一起,整形值从0开始,如果列表中某一个标示符有赋值,
那么紧跟其后的那个标示符的值比它大1,不想#define那样,枚举在调试器中也是可见的。
  1. enum weekly {mon = 1, tue, wen, thi, fri, sat, sun} w;

上一篇:重温C语言::1::(5)局部变量之恨
下一篇:重温C语言::1::(8)数组与指针之纠结