Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368885
  • 博文数量: 100
  • 博客积分: 2500
  • 博客等级: 大尉
  • 技术积分: 1209
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-15 21:24
文章分类

全部博文(100)

文章存档

2011年(100)

分类: C/C++

2011-07-14 21:30:54

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

2:奇怪的函数声明
  • 函数返回值: 不能是函数,可以是函数指针              例: int (* fun()) ()
  • 函数返回值: 不能是数组,可以是指向数组的指针    例: int (* foo()) []
  • 数组内部   : 不能有函数,可以有函数指针              例: int (* foo[]) ()
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;

阅读(1952) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~