首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >⾃定义类型:联合和枚举

⾃定义类型:联合和枚举

作者头像
optimistic_chen
发布2026-01-14 20:00:48
发布2026-01-14 20:00:48
770
举报

前言

与结构体类似,联合体也是一个自定义类型,大家或许在某些地方发现相同之处,二者可以相互借鉴,但不能混淆在一起哦~ ,枚举与二者都不同,敬请期待~

联合体类型的声明

像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。

代码语言:javascript
复制
#include <stdio.h>
//联合类型的声明
union Un
{
	char c;
	int i;
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	//计算2个变量的⼤⼩
	printf("%d\n", sizeof(un));
}

联合体的特点

联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)

我们可以用内存来阐释这个特点:

代码语言:javascript
复制
union Un
{
	char c;
	int i;
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	printf("%p\n", &(un.i));
	printf("%p\n", &(un.c));
	printf("%p\n", &un);
	return 0;
}
代码语言:javascript
复制
union Un
{
	char c;
	int i;
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	un.i = 0x11223344;
	un.c = 0x55;
	printf("%0x\n", un.i);

	return 0;
}
在这里插入图片描述
在这里插入图片描述

un的内存布局:

在这里插入图片描述
在这里插入图片描述

计算联合体的大小

• 联合的⼤⼩⾄少是最⼤成员的⼤⼩。 • 当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍

代码语言:javascript
复制
#include <stdio.h>
union Un1
{
	char c[5];
	int i;
};
union Un2
{
	short c[7];
	int i;
};
int main()
{
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	return 0;
}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联合体练习

代码语言:javascript
复制
int check_sys()
{
	union
	{
		int i;
		char c;
	}un;
	un.i = 1;
	return un.c; //返回1是⼩端,返回0是⼤端
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述

很巧妙的代码思路

枚举类型的声明

枚举顾名思义就是⼀⼀列举 把可能的取值⼀⼀列举 比如:星期,月份…

代码语言:javascript
复制
enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
在这里插入图片描述
在这里插入图片描述

定义的 enum Day , enum Month 都是枚举类型。 {}中的内容是枚举类型的可能取值,也叫 枚举常量 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

代码语言:javascript
复制
enum Color//三原色
{
RED=2,
GREEN=4,
BLUE=8
};

看到这,有人可能会想到我们之前学习过的 #define宏定义,它与枚举有什么区别或者优劣呢?

枚举的优势

1. 增加代码的可读性和可维护性 2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。 3. 便于调试,预处理阶段会删除 #define 定义的符号 4. 使⽤⽅便,⼀次可以定义多个常量 5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 我们在以后的

枚举的使用

代码语言:javascript
复制
enum Color//三原色
{
RED,
GREEN=4,
BLUE,
};

如果使用#define 来定义的话:

代码语言:javascript
复制
#define RED 0
#define GREEN 4
#define BULE 5

使⽤枚举常量给枚举变量赋值

代码语言:javascript
复制
enum Color//颜⾊
{
RED=1,
GREEN=2,
BLUE=4
};
enum Color clr = GREEN; //使⽤枚举常量给枚举变量赋值

5.完结

本次博客到此结束 祝开心每一天~~~ 最后觉得博客有帮助,可以点点关注,支持一下,期待下次博客~~~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 联合体类型的声明
    • 联合体的特点
    • 计算联合体的大小
    • 联合体练习
  • 枚举类型的声明
    • 枚举的优势
    • 枚举的使用
  • 5.完结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档