联合体的使用
联合体一般很少单独使用,而经常以结构体的成员形式存在,用来表达某种互斥的属性。
- 示例:
struct node
{
int a;
char b;
double c;
union attr at; // at内有三种互斥的属性,非此即彼
};
int main()
{
struct node n;
n.at.x = 100; // 使用连续的成员引用符来索引结构体中的联合体成员
}
枚举
枚举类型的本质是提供一种范围受限的整型,比如用0-6表示七种颜色,用0-3表示四种状态等,但枚举在C语言中并未实现其本来应有的效果,直到C++环境下枚举才拥有原本该有的属性。
- 枚举常量列表
- enum是关键字
- spectrum是枚举常量列表标签,可以省略。省略的情况下无法定义枚举变量
enum spectrum{red, orange, yellow, green, blue, cyan, purple};
enum {reset, running, sleep, stop};
- 枚举变量
enum spectrum color = orange; // 等价于 color = 1
- 语法要点:
- 枚举常量实质上就是整型,首个枚举常量默认为0。
- 枚举常量在定义时可以赋值,若不赋值,则取其前面的枚举常量的值加1。
- C语言中,枚举等价于整型,支持整型数据的一切操作。
- 使用举例:
switch(color)
{
case red:
// 处理红色...
case orange:
// 处理橙色...
case yellow:
// 处理黄色...
}
枚举数据最重要的作用,是使用有意义的单词,来替代无意义的数字,提高程序的可读性。