结构体与共用体的区别
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覆盖掉然后给它赋一个随机值。

浙公网安备 33010602011771号