结构体(struct)和共用体(union)是C语言中两种不同的数据类型,它们的区别如下:
1、存储方式
结构体:结构体中的每个成员都有自己独立的存储空间,成员的存储顺序按照声明的顺序依次排列。
共用体:共用体的所有成员共享同一块存储空间,同一时刻只能存储其中一个成员的值。
//结构体
struct Person {
char name[50];
int age;
float height;
};
//共用体
union Data {
int intValue;
float floatValue;
char charValue;
};
2、内存占用
结构体:内存占用为其所有成员占用内存之和。
printf("%d", sizeof(struct Person));
//Person结构体所占内存为60
共用体:内存占用为其最大成员所占用的内存大小。
printf("%d", sizeof(union Data));
//Data共用体所占内存为4
3、访问方式
结构体:可以同时访问结构体的所有成员。
struct Person person1;
strcpy_s(person1.name, 50,"张三");
person1.age = 25;
person1.height = 178.5;
printf("姓名:%s\n年龄:%d\n身高:%f", person1.name,person1.age,person1.height);
//运行结果:
//姓名:张三
//年龄:25
//身高:178.500000
共用体:在同一时刻只能访问其中一个成员。
union Data data;
data.intValue = 10;
printf("%d", data.intValue);
//结果:10
/*错误运行代码:
union Data data;
data.intValue = 10;
data.floatValue = 3.14;
printf("%d\n%f", data.intValue,data.floatValue);
结果:
1078523331
3.140000
*/
4、用途
结构体:常用于将不同类型但相关的数据结合在一起,以形成一个逻辑上的整体。
共用体:通常用于节省内存或者在不同时刻需要使用不同类型的同一存储空间的情况。