C语言中的共用体(union)和枚举(enum)

青春壹個敷衍的年華 提交于 2019-11-29 16:39:55

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];
View Code

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 }
View Code

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!