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

一、联合体

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

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

相关推荐
unicorn317 分钟前
学习学习学习
学习
云泽80819 分钟前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
笨笨没好名字21 分钟前
怎么看懂51单片机电路图与功能实现的C语言编写(2-7入门篇)
c语言·嵌入式硬件·51单片机
XGeFei1 小时前
【Fastapi学习笔记(3)】——资源的层级关系、安全性-幂等性、Field、工厂函数
笔记·学习·fastapi
wlsh151 小时前
Go 迭代器
算法
语戚1 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·
CS创新实验室2 小时前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法
星恒随风2 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
888CC++2 小时前
java 并发编程
java·开发语言·python
罗超驿2 小时前
18.Web API 实战:元素与表单属性的获取和修改
开发语言·前端·javascript