结构体与共用体的区别
C语言中的结构体(struct)和共用体(union)是用来存储不同类型的数据的复合数据类型,但它们在内存中的存储方式是有很大区别的
一、结构体
- 定义:结构体是一种用户自定义的数据类型,允许在一个单独的实体中存储不同类型的数据。结构体的成员可以是不同的数据类型。
- 内存分配:结构体的各个成员在内存中是按照其声明的顺序依次存储的,每个成员都有自己的内存空间。
- 大小计算:结构体的大小等于所有成员大小的总和,但可能会因为内存对齐的原因而有所增加。
- 访问成员:可以通过结构体变量的成员运算符.来访问结构体的成员。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> struct Person { char name[50]; int age; float salary; }; int main() { std::cout << sizeof ( struct Person) << std::endl; struct Person person; person.age = 18; person.salary = 12400.0; std::cout << person.age << std::endl; std::cout << person.salary << std::endl; return 0; } |
输出结果:
二、共用体
- 定义:共用体也是一种用户自定义的数据类型,但它允许在同一内存空间存储不同类型的数据,但一次只能存储其中一个成员。
- 内存分配:共用体的所有成员共享同一块内存空间,因此共用体的大小等于最大成员的大小。
- 大小计算:共用体的大小等于最大成员的大小。
- 访问成员:通过共用体变量的成员运算符.来访问共用体的成员,只能访问当前存储的成员
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream> union Data { int i; float f; char str[20]; }; int main() { union Data value; value.i = 10; value.f = 40.0; std::cout << sizeof ( union Data) << std::endl; std::cout << value.i << std::endl; std::cout << value.f << std::endl; return 0; } |
打印结果:
由打印结果可以看出,共用体共用一块内存,当初始化value.f = 40.0时,它会把value.i = 10覆盖掉然后给它赋一个随机值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?