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

一、联合体

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

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

相关推荐
非凡ghost2 小时前
小X分身APP(手机分身类工具)
android·windows·学习·智能手机·软件需求
SmartBrain2 小时前
FastAPI进阶(第一部分):路由和依赖特性(含考题)
开发语言·python
小学卷王2 小时前
复试day25
算法
样例过了就是过了2 小时前
LeetCode热题100 和为 K 的子数组
数据结构·算法·leetcode
二年级程序员2 小时前
单链表算法思路详解(下)
c语言·数据结构·算法
weixin_458872612 小时前
东华复试OJ每日3题打卡·复盘82~84
学习
HAPPY酷2 小时前
C++ 成员指针(Pointer to Member)完全指南
java·c++·算法
Sunsets_Red2 小时前
浅谈随机化与模拟退火
java·c语言·c++·python·算法·c#·信息学竞赛
Felven2 小时前
A. Add and Divide
数据结构·算法