Struct和union的理解

结构体(struct)和共用体(union)都是用于组合多个不同类型的数据成员,但它们在内存存储方式和数据访问方式上存在差异。以下是结构体和共用体之间的主要区别:

结构体(struct):

内存布局:结构体的每个成员都分配独立的内存空间,各成员在内存中按照定义的顺序依次排列。

内存占用:结构体的大小等于各成员大小之和,可能会有额外的填充字节以保持对齐。

数据隔离:不同成员之间的数据相互独立,修改一个成员不会影响其他成员。

使用场景:结构体适用于组合和管理多个关联的数据项,每个成员存储不同类型的数据。

共用体(union):

内存布局:共用体的所有成员共享同一块内存空间,不同成员的值使用相同的内存位置。

内存占用:共用体的大小等于最大成员的大小,因为所有成员共享同一块内存。

数据共享:不同成员共享同一块内存,修改一个成员可能会影响其他成员的值。

使用场景:共用体适用于存储不同类型的数据,在不同的情况下只需要访问其中一种类型的数据。

下面举个例子

c 复制代码
Struct和union的使用。
Struct 狗
{
Int 白狗;
Int 黑狗;
Int 花狗;
}struct_dog;
这里狗类中,白狗,黑狗,花狗每一种狗都有一个家,都有自己的小窝。
c 复制代码
但是共用体就不一样了
union狗1
{
Int 白狗1;
Int 黑狗1;
double 花狗1;
}struct_dog1;
这里的狗类,只有一个家,一个窝,谁要想住窝就得打架,打赢了把那两个狗杀死他就可住了,可以理解为适者生存。每一次的数据更新这里的狗都会进行打架,把其他两个狗杀死。

说白了结构体是有几个成员就分配几次内存地址;共用体是以共用体中的数据占有最大的来分配,比如刚才union狗1的double 占用8个字节,那么这个狗窝就是8个字节,不会是小的,是取最大的。

不知道大家明白了嘛,欢迎交流

相关推荐
handler011 小时前
拒绝权限报错!三分钟掌握 Linux 权限管理
linux·c语言·c++·笔记·学习
代码中介商3 小时前
C语言数据存储深度解析:从原码反码补码到浮点数存储
c语言·开发语言·内存
hipolymers4 小时前
C语言怎么样?难学吗?
c语言·数据结构·学习·算法·编程
努力努力再努力wz6 小时前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
minji...6 小时前
Linux 线程同步与互斥(四) POSIX信号量,基于环形队列的生产者消费者模型
linux·运维·服务器·c语言·开发语言·c++
uElY ITER7 小时前
VS与SQL Sever(C语言操作数据库)
c语言·数据库·sql
程序猿编码7 小时前
给Linux程序穿“隐身衣”——ELF运行时加密器全解析(C/C++代码实现)
linux·c语言·c++·网络安全·elf·内存安全
Goway_Hui7 小时前
【ReactNative鸿蒙化-三方库使用与C-API集成】
c语言·react native·harmonyos
♛识尔如昼♛8 小时前
C 基础(14) - 结构和其他数据形式
c语言·结构体
syker9 小时前
AIFerric v2.0 项目总结报告
c语言·开发语言·c++