自定义类型:联合和枚举(一)

一、联合体

1.1.联合体类型的说明

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

但是编译器只为最大的成员分配足够的内存空间,联合体的特点是所有成员共用一块内存空间所以联合体也叫做:共用体

给联合体其中一个成员赋值其他成员的值也跟着变化。

1.2.测试代码

试想一下结果为什么是4?

代码如下(可自行测试):

#include<stdio.h>

union Un{//联合类型的声明

char c;

int i;

};

int main() {

union Un un = { 0 };//联合变量的创建

printf("%d\n", sizeof(un));

return 0;

}

二、联合体的特点

2.1.联合的成员是共用于同一块内存空间的

这样一个联合变量的大小,至少是最大成员的大小,(因为联合至少得有能力保存最大的那个成员)

2.2.代码1

代码如下(可自行测试):

#include<stdio.h>

union Un {//联合类型的声明

char c;

int i;

};

int main() {

union Un un = { 0 };//联合变量的创建

printf("%p\n", &un.c);

printf("%p\n", &un.i);

printf("%p\n", &un);

return 0;

}

2.3.代码2

代码如下(可自行测试):

#include<stdio.h>

union Un {//联合类型的声明

char c;

int i;

};

int main() {

union Un un = { 0 };//联合变量的创建

un.i = 0x11223344;

un.c = 0x55;

printf("%x\n", un.i);

return 0;

}

2.4.总结

代码一输出的三个地址一模一样,代码二的输出发现将i的第4个字节内容修改为55了

一句话记住:

"联合体,同一块内存,不同名字,同一时间只认一个。"

三、相同成员的结构体和联合体的对比

3.1.结构体

struct S {

char c;

int i;

};

3.2.联合体

union U {

char c;

int i;

};

3.3.一句话口诀:

结构体是"并排坐",联合体是"叠着住"。

相关推荐
敢敢のwings6 分钟前
智元 GO-2 与 AgiBot-World 深度解读
开发语言·后端·golang
yaoxin52112314 分钟前
503. Java 反射 - 编写 ServiceFactory 类
java·开发语言·python
AI备案指南-满满24 分钟前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案
Linux-lucky25 分钟前
28-Linux学习之旅之Maven与Nexus制品库
linux·运维·学习·nginx·tomcat·maven
LuminousCPP31 分钟前
数据结构‑二叉树(二):二叉堆从零实现|Heap结构设计 + 建堆优化 + 堆排序深度解析
c语言·数据结构·笔记·二叉树
一个帅气昵称啊35 分钟前
.Net C# AI智能体开发-快速开始
开发语言·c#·.net
kyrie_sakura1 小时前
python学习笔记3 -- 流程控制语句结构
笔记·python·学习
冷凝娇1 小时前
【Pytest】2026 学习总结
学习·pytest
冬夜戏雪1 小时前
agent的trace 和eval
开发语言·前端·javascript
Sagittarius_A*1 小时前
Burst Lab | PHP 审计 13|反序列化(三):POP 链构造与 Gadget Chain 分析
开发语言·web安全·php·代码审计·反序列化