第二十章(自定义类型,联合和枚举)

发布于:2024-10-09 ⋅ 阅读:(124) ⋅ 点赞:(0)

1. 联合体类型的声明

2. 联合体的特点

3. 联合体⼤⼩的计算

4. 枚举类型的声明

5. 枚举类型的优点

6. 枚举类型的使⽤

            光阴如骏马加鞭

一、联合体

概念:像结构体一样,联合体也是由一个或者多个成员组成的,这些成员也可以是不同的类型。

这里我们需要注意的是:编译器只会为最大的成员分配足够内存空间。联合体的特点是所有成员共用一块内存空间。
所以联合体,又叫共用体

  1. 给联合体内部的一个值赋值,其它的值也会跟着变化
union s
{
	char i ;
	int a;
};

int main()
{
	printf("%zd ", sizeof(union s));
	return 0;
}

在这里插入图片描述
那么 为什么结果是4呢?

1.2 联合体的特点:因为联合体是共用一块空间的,所以联合体至少要有能够保护最大的能力
这里我们来用代码来检验一下

union s
	{
		char i ;
		int a;
	};
	
	int main()
	{
		union s s1 ;
		printf("%p\n", &(s1.i));
		printf("%p\n", &(s1.i));
		printf("%p\n", &(s1));

		return 0;
	}

在这里插入图片描述


union s
	{
		char c ;
		int i;
	};
	
	int main()
	{
		union s s1 = {0};
		s1.i = 0x11223344;
		s1.c = 0x55;

		printf("%x\n", s1.i);
		return 0;
	}

在这里插入图片描述
为什么输出结果是这样的呢?接下来我们就来画图解释
在这里插入图片描述
1.3相同成员的结构体和联合体对比
在这里插入图片描述
我们能够看出来的是,联合体会很好的节约空间

这里我们来写一个判断程序的大小端的代码

int test()
{
	union s
	{
		char i;
		int a;
	}s1;
	s1.a = 1;
	return s1.a ;
}

int main()
{
	int ret = test();
	if (ret == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}

	return 0;
}

二、 枚举类型
2.1枚举类型的声明
枚举类型我们从表面的意思就可以很好的了解,是一一例举出来的意思。
例子:
1.一年的月份 1到12月
2.一周的天数:星期一到星期日
3. 性别 男 女 保密

这些类型我们就可以用枚举了

enum Day
{
    Mon,
	Tue,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun,

};


int main()
{
	return 0;
}

{ }的内容都是枚举类型的可能取值,我们称之为枚举常量
在声明枚举类型的时候我们是可以给其赋值的。

enum Day
{
	Mon = 1,
	Tue = 2 ,
	Wed = 3,
	Thur= 4,
	Fri = 5,
	Sat = 6,
	Sun = 7,

};


int main()
{
	return 0;
}

2.2枚举类型的优点
我们为什么要使用枚举呢?
#define就可以定义常量我们为什么非要使用枚举类型呢?
1.增加代码的可读性和可维护性
2.与define定义的标识符相比较,枚举类型更容易检查,更加严谨。
3.方便调试,用define定义的常量在预处理阶段会被替换
4.方便使用,可以定义多个常量
5.遵循作用域的规则

2.3 枚举类型的使用

在这里插入图片描述
这里我们发现,在c语言中我们可以拿整数给枚举变量赋值,但是在c++中这是不行的。


网站公告

今日签到

点亮在社区的每一天
去签到