Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >联合(共用体)的讲解

联合(共用体)的讲解

作者头像
薄荷冰
发布于 2024-01-22 13:45:45
发布于 2024-01-22 13:45:45
17700
代码可运行
举报
文章被收录于专栏:后端学习之旅后端学习之旅
运行总次数:0
代码可运行

1.联合类型的定义

联合也是一种特殊的自定义类型

这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

具体如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//联合体的申明
union Un
{
	char c;
	int i;
};
//联合变量的定义
union Un un;
//计算连个变量的大小
int main()
{
	printf("%d\n", sizeof(un));
}

输出结果:4

2.联合体的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联

合至少得有能力保存最大的那个成员)。但每种变量所占空间大小还是遵循自己本生的类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
union Un
{
	char c;
	int i;
};
union Un un;
int main()
{
	printf("%d\n", sizeof(un.c));
	printf("%d\n", sizeof(un.i));
}

结果:1

4

所谓公用同一块空间是指在开辟内存空间时不同类型的变量的起始地址相同。

那么我们就可以用他解决问题,判断当前计算机的大小端存储。(什么是大小端存储

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
union Un
{
	char c;
	int i;
};
union Un un;
int main()
{
	un.c = 0x01;
	if (un.i == 0x01)
		printf("小端");
	if (un.i == 0x01000000)
		printf("大端");
	return 0;
}

结果:小端;

3. 联合大小的计算

联合的大小至少是最大成员的大小。 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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));
}

结果:8 16

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
轻松拿捏C语言——自定义类型之【联合体与枚举】
在union Un1中成员有两个,char c[5]占5个字节大小,在vs中1<8,所以char的对齐数为1,int i占4个字节大小,在vs中4<8,所以int类型对齐数为4, 所以在union Un1中最大对齐数为4。
用户11162265
2024/06/14
1850
轻松拿捏C语言——自定义类型之【联合体与枚举】
【C语言】自定义类型:联合和枚举
前面我们学习了一种自定义类型,结构体,现在我们学习另外两种自定义类型,联合 和 枚举。
云边有个稻草人
2024/10/21
1280
【C语言】自定义类型:联合和枚举
【自定义类型详解】完结篇——枚举与联合体(共用体)详解
枚举顾名思义就是一 一列举。 把可能的取值一 一列举。 比如在我们的日常生活中:
YIN_尹
2024/01/23
3380
【自定义类型详解】完结篇——枚举与联合体(共用体)详解
【C语言】联合体和枚举
但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。
用户11290673
2024/09/25
1520
【C语言】联合体和枚举
枚举与联合
这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。
用户10921393
2024/01/23
1610
【C语言】联合和枚举
联合体的定义与结构体相似,但是联合体往往会节省更多的空间,它的特点是所有成员共用一块内存空间,结构体也叫共用体 联合体中给某一成员赋值,其他成员值往往会跟着变化
s-little-monster
2024/06/06
1500
【C语言】联合和枚举
C语言——自定义类型:联合与枚举
1.结构体所有成员的空间都是独立的,而联合体所有成员都共用一块空间(所以也叫共同体),与结构体不同,联合体的关键字是union
迷迭所归处
2024/11/19
1210
C语言——自定义类型:联合与枚举
自定义类型:联合体和枚举
但是编译器只为最大的成员分配足够的内存空间。联合体特点是所有成员共用同一块内存空间。所以联合体也叫共同体。
熬夜学编程的小王
2024/11/20
950
自定义类型:联合体和枚举
自定义类型:结构体,枚举,联合 (2)
 A就是一个位段类型,位段的位指的是二进制位,成员名后的数字代表着占空间的多少个bit位,_a占2个bit位,_b占5个bit位。 那位段A的大小是多少?
用户10923087
2024/01/23
1710
自定义类型:结构体,枚举,联合 (2)
自定义类型:联合体和枚举类型(联合体与结构体的区别)
像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。 给联合体其中一个成员赋值,其他成员的值也跟着变化。
走在努力路上的自己
2024/01/26
2250
自定义类型:联合体和枚举类型(联合体与结构体的区别)
C语言——自定义类型之联合体
联合体类型定义的变量包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
摘星
2023/04/28
3470
C语言——自定义类型之联合体
自定义类型:联合体和枚举
但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。
Crossoads
2024/10/21
1220
自定义类型:联合体和枚举
联合体类型和枚举类型
对于联合体,其语法结构和结构体对比可以说唯一的变换就是把struct换成union,其他的都一模一样,所以我们知道了struct的语法结构相当于知道union的语法结构,其初始化和创建也就得心应手。(上篇文章已经讲了struct的语法结构(声明),这里就不讲了,不知道的可以翻到上篇文章看一下)
E绵绵
2024/04/08
1980
联合体类型和枚举类型
C语言从入门到实战——联合体和枚举
C语言中,联合体(union)是一种特殊的数据类型,允许存储不同类型的数据在同一块内存空间中。联合体的大小取决于其中最大的成员的大小,共享同一块内存空间的成员可以存储不同类型的数据。
鲜于言悠
2024/03/20
2860
C语言从入门到实战——联合体和枚举
【C语言】自定义类型之联合和枚举
像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最大的成员分配足够的内存空间。 联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。
zxctscl
2024/01/23
1760
【C语言】自定义类型之联合和枚举
C语言学习系列->联合体and枚举
联合体也是自定义类型,关键字为union,特点是所有成员共⽤同⼀块内存空间,因此,联合体也叫做共用体。
南桥
2024/01/26
1240
C语言学习系列->联合体and枚举
C语言自定义类型联合体与枚举超详解
像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。 给联合体其中一个成员赋值,其他成员的值也跟着变化。
fhvyxyci
2024/09/24
1590
C语言自定义类型联合体与枚举超详解
C语言进阶(六)--自定义类型详解(结构体+枚举+联合)
  在上述代码中,并未给结构体加上标签,所以我们在使用时无法直接使用其变量,在;前创建变量,且只能用一次。
RAIN7
2021/08/11
7440
【C语言进阶】C语言进阶教程:利用结构体、联合体和枚举自定义数据类型
前言:在C语言的浩瀚宇宙中,自定义类型如同璀璨星辰,为开发者们提供了无限的可能性和创造力。作为一门历史悠久且功能强大的编程语言,C语言不仅以其接近硬件的特性和高效的执行效率著称,更以其灵活的数据结构定义方式赢得了广泛的赞誉。而自定义类型,正是这一灵活性的集中体现
Eternity._
2024/09/07
1110
【C语言进阶】C语言进阶教程:利用结构体、联合体和枚举自定义数据类型
【C语言】自定义类型:联合体和枚举
   像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以是不同的类型    联合体的特点是所有成员共⽤同⼀块内存空间,所以联合体也叫共同体,由于所有成员共用一块空间,所以编译器只为最⼤的成员分配足够的内存空间 ,并且当给联合体其中⼀个成员赋值时,其他成员的值也跟着变化,我们后面也会讲到    现在我们从联合体类型的声明开始学习,它的声明也和结构体的声明相似,结构体声明时使用struct关键字,而联合体声明时使用union关键字,如下:
TANGLONG
2024/10/15
1210
【C语言】自定义类型:联合体和枚举
相关推荐
轻松拿捏C语言——自定义类型之【联合体与枚举】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档