1 union
union Data{
int i;
char ch;
float f;
}a={1, 'a', 1.5}; //错误
union Data a = {16}; //正确
union Data a = {.ch = ‘j’}; //正确
在什么情况下使用共用体类型的数据?往往在数据处理中,有时需要对同一段空间安排不同的用途,这时用共用体类型比较方便,能增加程序处理的灵活性。
例如,学生的数据包括:姓名、号码、性别、职业、班级。
教师的数据包括:姓名、号码、性别、职业、职务。
要求用同一个表格来表示。
C语言核心代码

1 struct{
2 int num; //成员 编号
3 char name[10]; //成员 姓名
4 char sex; //成员 性别
5 union{ //声明无名共用体类型
6 int class; //成员 班级
7 char position[10];//成员 职务
8 }category;
9 }person[2];
2 enum
一个变量只有几种可能的值,则可以定义为枚举(enumeration)类型。
enum Weekday{sun=7, mon=1, tue, wed, thui, fri, sat} workday, weak_end; {}内,tue为2,wed为3,thu为4……。
enum Weekday{sun, mon, tue, wed, thui, fri, sat} workday, weak_end; {}内,sun=0, mon=1, tue为2,wed为3,thu为4……。
在枚举类型中,第一个枚举元素的值为0。
enum escapes //转移符
{
BELL = '\a',
BACKSPACE = '\b',
HTAB = '\t',
RETURN = '\r',
NEWLINE = '\n',
VTAB = '\v',
SPACE = ' '
};

1 #include<stdio.h>
2
3
4
5 enum
6
7 {
8
9 BELL = '\a',
10
11 BACKSPACE = '\b',
12
13 HTAB = '\t',
14
15 RETURN = '\r',
16
17 NEWLINE = '\n',
18
19 VTAB = '\v',
20
21 SPACE = ' '
22
23 };
24
25
26
27 enum BOOLEAN { FALSE = 0, TRUE } match_flag;
28
29
30
31 void main()
32
33 {
34
35 int index = 0;
36
37 int count_of_letter = 0;
38
39 int count_of_space = 0;
40
41
42
43 char str[] = "I'm Ely efod";
44
45
46
47 match_flag = FALSE;
48
49
50
51 for(; str[index] != '\0'; index++)
52
53 if( SPACE != str[index] )
54
55 count_of_letter++;
56
57 else
58
59 {
60
61 match_flag = (enum BOOLEAN) 1;
62
63 count_of_space++;
64
65 }
66
67
68 printf("%s %d times %c", match_flag ? "match" : "not match", count_of_space, NEWLINE);
69
70 printf("count of letters: %d %c%c", count_of_letter, NEWLINE, RETURN);
71
72 }
