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

一、联合体

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

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

相关推荐
代码中介商7 分钟前
C++运行时多态深度解析:从原理到实践
开发语言·c++·多态·虚函数
QuZero7 分钟前
Semaphore Principle
java·算法
ZPC821011 分钟前
自定义机械臂驱动(Action Server + /joint_states 发布)
算法
啊我不会诶12 分钟前
牛客练习赛151
算法·深度优先·图论
额呃呃17 分钟前
Andriod项目番茄钟
java·开发语言
Via_Neo18 分钟前
不能对方法返回值进行赋值
开发语言·python
Ricardo-Yang18 分钟前
# BPE Tokenizer:从训练规则到推理切分的完整理解
人工智能·深度学习·算法·机器学习·计算机视觉
梅孔立23 分钟前
Java 基于 POI 模板 Excel 导出工具类 双数据源 + 自动合并单元格 + 自适应行高 完整实战
java·开发语言·excel
qyzm24 分钟前
牛客周赛 Round 140
数据结构·python·算法
Severus_black24 分钟前
顺序表、单链表经典算法题分享(未完待续...)
c语言·数据结构·算法·链表