C学习-基础:共用体类型 union 和 枚举类型 enum
共用体类型
把不同类型的数据存放在同一段内存单元中,这些不同类型的数据分时共享同一段内存单元。
union 共用体类型名 {成员列表};
定义共用体类型的关键是 “union”。同结构类型的定义方式相似
成员可以是基本数据类型,也可以是数组,指针,以及其他构造类型。
必须先定义共用体类型,然后再定义该类型的变量。
共用体与结构体的区别:
结构体类型是异址的,而共用体类型是同址的。
结构体长度是各成员长度之和,而共用体长度是成员列表中长度最长的成员长度。
共用体变量的定义
定义类型后说明变量 union data { char c; int i; float f; }; union data u1,u2;
上面定义占用内存情况:
共用体变量成员的引用方法
1). 运算符
共用体变量中引用成员也是用 .运算符
union data u1; u1.i=12; u1.f=3.4;
2)->运算符
若用共用体类型的指针来指向共用体变量,则用 ->来访问成员。
union data *p=&u1; p->i=12; p->f=3.4;
枚举类型
"枚举" 就是将变量可能的值一一列举出来,变量的值只能取列举出来的值之一。
枚举类型的元素为固定常量的集合。
枚举类型的定义
enum 枚举类型名
{ 枚举值表 };
枚举值表::在枚举值表中应罗列出所有可用值,这些值也称为枚举元素。
例如:
enum COLOR{red,green,blue}; enum WEEKDAY { sun,mon,tue,wed,thu,fri,sat};
枚举变量的定义
和结构体一样,3种方法
先定义枚举类型,再定义枚举变量a,b,c
enum WEEKDAY {sun,mon,tue,wed,thu,fri,sat}; enum WEEKDAY a,b,c;
在定义枚举类型时直接定义变量:
enum WEEKDAY {sun,mon,tue,wed,thu,fri,sat} a,b,c;
省略枚举名称,直接定义枚举变量
enum {spring, summer, autumn, winter} a b c;
枚举变量的说明
枚举元素不能赋值。定义枚举类型时可以指定其值
C语言编译器会将枚举元素(spring、summer等)作为整型常量处理,称为枚举常量。
枚举元素本身由系统定义了一个表示序号的数值,默认从0开始顺序定义为0,1,2…。也可以在定义枚举类型时改变枚举元素的值,没有指定值的枚举元素,其值为前一元素加1。
例子:
#include <stdio.h> int main(int argc, char const *argv[]) { int waitag; enum WEEKDAY { sun, //默认枚举元素的值从 0 开始 mon, tue, wed = 8, //自定义 枚举元素的值 thu, //他值为 前一个 +1 fri, sat } a, b, c, d; a = sun; // 等价于 a = 0; b = mon; // 等价于 a = 1; c = wed; d = thu; printf("a序号:%d\nb序号:%d\nc序号:%d\nd序号:%d", a, b, c, d); scanf("%d", &waitag); return 0; }
输出
a序号:0 b序号:1 c序号:8 d序号:9
枚举值可以作判断
例如:
enum WEEKDAY day; if (day == mon)… if (day > sun)…
打印 枚举类型 定义的变量
C语言枚举类型只能打印为%d格式,而且打印的结果是当前这个元素在枚举类型的位置。
enum enumtest{test1, test2}; printf("%d",test1);
此时打印结果是0,表示test1在他的枚举类型定义为第0个元素。
如果要打印出来test1的话,可以增加一个字符串数组,通过位置索引来打印test1.
int main(){ enum enumtest{test1,test2}; char *s[]={"test1","test2"}; printf("%d\n",test2); // test2 为1 在枚举中定义的变量 printf("%s\n",s[test2]); //这里的 test2 为变量 1 ,是在枚举中定义的哦 return 0; }
打印结果为 :
1 test2
共 0 条评论