C语言中的结构体(struct)和共用体(union)是用来存储不同类型的数据的复合数据类型,但它们在内存中的存储方式是有很大区别的
一、结构体
- 定义:结构体是一种用户自定义的数据类型,允许在一个单独的实体中存储不同类型的数据。结构体的成员可以是不同的数据类型。
- 内存分配:结构体的各个成员在内存中是按照其声明的顺序依次存储的,每个成员都有自己的内存空间。
- 大小计算:结构体的大小等于所有成员大小的总和,但可能会因为内存对齐的原因而有所增加。
- 访问成员:可以通过结构体变量的成员运算符.来访问结构体的成员。
#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; }
输出结果:
二、共用体
- 定义:共用体也是一种用户自定义的数据类型,但它允许在同一内存空间存储不同类型的数据,但一次只能存储其中一个成员。
- 内存分配:共用体的所有成员共享同一块内存空间,因此共用体的大小等于最大成员的大小。
- 大小计算:共用体的大小等于最大成员的大小。
- 访问成员:通过共用体变量的成员运算符.来访问共用体的成员,只能访问当前存储的成员
#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覆盖掉然后给它赋一个随机值。
标签:存储,区别,成员,数据类型,value,内存,共用,结构 From: https://www.cnblogs.com/TechNomad/p/17862660.html