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

一、联合体

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.一句话口诀:

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

相关推荐
qq_4017004122 分钟前
Qt Modbus 源码剖析:从 QModbusClient 到工业级通信框架
开发语言·qt·系统架构
星夜离尘5624 分钟前
MATLAB 角度解缠遇到丢样:先分段,再说明圈数为什么不可恢复
开发语言·matlab
kyrie_sakura29 分钟前
大模型学习17 大模型学习 - LangChain1_概述
学习
我命由我1234532 分钟前
6-2.Python 异常处理 - 异常捕获(捕获指定异常、常见异常类型、异常信息)
java·运维·开发语言·python·http·https·java-ee
ZoeLandia34 分钟前
React08:自定义 Hook
开发语言·前端·react.js·typescript
ZhengEnCi41 分钟前
一亿条数据取前100条完全指南:从全量排序到分块流式最小堆的4种解法实测
python·算法·排序算法
C++ 老炮儿的技术栈1 小时前
机器人的坐标,像 XYZ 的坐标值,是用单精度浮点还是用双精度浮点?
c语言·c++·人工智能·单片机·c
zaizai10071 小时前
STL深度剖析2
java·c++·算法
染指11101 小时前
157.Agent-LangGraph-工具(实现ReAct Agent模式)
开发语言·人工智能·python·langchain·agents
程序猿乐锅1 小时前
【从0-1学习Python | 第九篇】继承
开发语言·后端·python·学习·fastapi