第十一章 共用体union和枚举enum

共用体

概念

有时想用同一段内存单元存放不同类型的变量。例如,把一个短整型变量,一个字符型变量和一个实型变量放在同一个地址开始的内存单元中 1000地址。以上3个变量在内存中占的字节数不同,但都从同一地址开始(图中设地址为1000)存放,也就是使用覆益技术,后一个数据覆益了前面的数据。这种使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构。
在这里插入图片描述

定义方式和使用

定义方式和结构体类似

typedef union stu
{
	char a;
	int b;
	float c;
}STU;
int main()
{
	STU test;
	test.b = 97;
	printf("%d\n", sizeof(test));
	printf("%c\n", test.a);
	printf("%d\n", test.b);
	printf("%f\n", test.c);
}

![运行结果](https://img-blog.csdnimg.cn/c5e3bad321d94c1799a417ee760aeafb.png

结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的存单元。
而共用体变量所占的内存长度等于最长的成员的长度。

特点

1、同一内存段可以存放集中不同类型的成员,但每一瞬间只能由一种起作用
2、共用体变量中起作用的成员是最后一次存放的成员。在存入一个新成员后原有的成员的值会被覆盖
3、共用体变量的地址和他的各个成员的地址都是同一地址
4、共用体变量的初始化

union Data
{
	int i;
	char ch;
	float f;
};
int main()
{
	union Data a = { 16 };//对第一个变量赋值
	union Data b = { .ch = 'A' };//对第二个变量赋值
	printf("%d\n", a.i);//16
	printf("%c\n", b.ch);//A
}

5、不能对共用体变量名赋值,同类型的共用体变量可以互相赋值。

枚举

概念

枚举类型就是指把可能的值一 一列举出来,变量的值只限于列举出来的值的范围内。

定义

enum 枚举类型名{
枚举值列表
}

enum Color {
	red,blue,green,black,white
};
int main()
{
	enum Color sky = blue;//真确,blue是定义中的值
	enum Color sky = a;//错误
}

注意:
1、C编译对枚举类型的枚举元素按常量处理,故称枚举常量。不要因为它们是标识
符(有名字)而把它们看作变量,不能对它们赋值。例如:
blue = 1;
2、每一个枚举元素都代表一个整数,C语言编译按定义时的顺序默认它们的值为0,1,2,3,4,5…。

enum Color {
	red, blue, green, black, white
};
int main()
{
	printf("%d\n", red);//0
	printf("%d\n", blue);//1
	printf("%d\n", green);//2
	printf("%d\n", black);//3
	printf("%d\n", white);//4
}

也可以人为地指定枚举元素的数值,在定义枚举类型时显式地指定,例如;

enum Color {
	red = 4, blue = 4, green = 2, black = 1, white = 7
};
int main()
{
	printf("%d\n", red);//4
	printf("%d\n", blue);//4
	printf("%d\n", green);//2
	printf("%d\n", black);//1
	printf("%d\n", white);//7
}

3、枚举元素可以用来作判断比较。例如;

enum Color {
	red = 4, blue = 4, green = 2, black = 1, white = 7
};
int main()
{
	enum Color sky = blue;
	if (sky == blue) {
		printf("%s", "sky is blue");
	}
	if(sky > red){
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七号公园的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值