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

共用体

概念

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

定义方式和使用

定义方式和结构体类似

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);
}

第十一章 共用体union和枚举enum_第2张图片

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

特点

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){
	}
}

你可能感兴趣的:(c,c语言)