C语言——联合体类型

📝前言:

在前面两篇文章:C语言------结构体类型(一)C语言------结构体(二)中,我们讲述了C语言中重要的数据类型之一:结构体类型,今天我们来介绍一下C语言中的另一种数据类型:联合体类型

我会从以下几个方面进行讲解:
1,什么是联合体
2,联合体的声明
3,联合体的特点
4,联合体大小

🎬个人简介:努力学习ing

📋个人专栏:C语言入门基础

🎀CSDN主页 愚润求学

🌄每日鸡汤:但凡不能杀死你的,最终都会使你更强大


文章目录

一,什么是联合体

联合体也称共用体

像结构体一样,联合体也是由一个或者多个成员构成,这些成员的类型可以不同。但是,与结构体不同的是:联合体的所有成员共用一块内存空间。(即:给联合体其中的一个成员赋值,其他成员的值也会跟着被改变)

二,联合体的声明

1,联合体类型的声明

C语言中联合体类型的定义形式:

union 联合体名

{

成员项表列

};

例如:

(我们定义一个同时由char和int型构成的联合体)

c 复制代码
union Un
{
   char c;
   int i;
}; (注意:分号不能丢)

2,联合体变量的创建

同结构体变量的创建类似,我们可以在声明联合体类型的同时创建变量;也可以在声明后,再创建变量

如:

(1)先声明联合体类型,再创建变量

c 复制代码
#include<stdio.h>
union Un
{
	char c;
	int i;
};
union Un u1;

(2)在声明联合体类型的同时创建变量

c 复制代码
union Un
{
	char c;
	int i;
}u1;

对联合体成员的引用也与对结构体成员的引用相同

三,联合体的特点

1,联合体与结构体的对比

联合体的大部分与结构体相似,其独特之处就是所有成员共用一块内存空间

例如,我们看拥有相同成员的结构体和联合体对比:

对于s1 和 u1的内存分配情况应该是:

我们可以用sizeof算一算,看看结果:

运行下面代码:

c 复制代码
int main()
{
	printf("%d\n", sizeof(s1));
	printf("%d\n", sizeof(u1));
	return 0;
}

输出:

可以发现:和我们上面的分析一样

2,对联合体成员进行改变

下面我们就对联合体u1中的成员c进行赋值,然后再打印成员i

c 复制代码
#include<stdio.h>
union Un
{
	char c;
	int i;
}u1;
int main()
{
	u1.c = 1;
	printf("%d", u1.i);
	return 0;
}

运行结果:

可见:尽管没有给成员i赋值,但是随着成员c被修改成员i的值也发生了变化

四,联合体的大小

上面提到的联合体u1的大小是4,刚好是当中最大的int类型的大小,难道联合体的大小就是其中最大成员的大小吗?

答案是:错误的
因为联合体的大小也要满足是最大对齐数的整数倍

⭐换句话来说,联合体的大小要满足以下两个条件:

1,大于或等于最大的成员(至少要能装下最大的成员)

2,同时是最大对齐数的整数倍

对于上面的u1

最大成员:int类型的大小是4

int的最大对齐数也是4,所以联合体u1的大小是4

再看下面的代码(多加一个字符数组):

c 复制代码
#include<stdio.h>
union Un
{
	char c;
	int i;
	char arr[6];
}u1;
int main()
{
	u1.c = 1;
	printf("%d",sizeof(u1));
	return 0;
}

运行结果:

这是因为:

1,最大成员char arr[6]的大小是6

2,最大对齐数是4

6不是4的倍数,所以扩宽到8,所以联合体的大小是8


🌈我的分享也就到此结束啦🌈

要是我的分享也能对你的学习起到帮助,那简直是太酷啦!

若有不足,还请大家多多指正,我们一起学习交流!

📢公主,王子:点赞👍→收藏⭐→关注🔍

感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

相关推荐
巴伦是只猫1 小时前
【机器学习笔记Ⅰ】11 多项式回归
笔记·机器学习·回归
DKPT4 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
努力的小雨6 小时前
点我!1分钱获取你的专属表白网页,浪漫由大模型代运营
经验分享·ai智能
巴伦是只猫6 小时前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
学不动CV了6 小时前
ARM单片机启动流程(二)(详细解析)
c语言·arm开发·stm32·单片机·51单片机
猫猫的小茶馆8 小时前
【STM32】通用定时器基本原理
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
Luna-player9 小时前
黑布淡入淡出效果
经验分享·游戏
pumpkin845149 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
2401_8582861110 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
双叶83611 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++