结构体: 可以一次调用全部属性。装不同的数据结构。用 “struct +名字{ }”
共同体:每次只能调用其中一个。用 “union+名字{ }”
共用体(union)是一种特殊的数据类型,它允许不同的数据类型在相同的内存位置上进行存储,同时只能对一个数据成员进行操作
实例:使用
#include <iostream>
using namespace std;
#include<string>
//结构体,可以一次调用全部属性
struct project
{
char name[20];
int type;//决定共同体的选择
//共同体
union id{
int id_int;
char id_char[20];
}id;
};
int main()
{
project pro;
cin>>pro.name;
cin>>pro.type;
if(pro.type==1)
{
cin>>pro.id.id_int;
}else{
cin>>pro.id.id_char;}
//更改
cout<<pro.name<<" "<<pro.type<<" "<<pro.id.id_char;
return 0;
}
运行结果:(char)
更改代码:
运行结果:(int)
区别:
-
内存分配不同:结构体中的所有成员在内存中按顺序依次分配,每个成员的地址都是连续的;而共用体的所有成员共享同一块内存,不同的成员在不同的时候使用同一块内存。
-
内存大小不同:结构体的大小取决于所有成员的大小之和,并且每个成员有自己的内存地址;而共用体的大小取决于最长的成员,并且所有成员都从同一块内存中读取数据。
-
使用方式不同:结构体适用于需要存储多种不同类型数据的场景,而共用体适用于需要对同一块内存进行不同类型的读/写操作的场景。
总的来说,结构体和共用体都是C++(c语言也适用)中强大的自定义数据类型,可以让我们更加灵活地处理数据,并且常常被用于实现复杂的数据结构和算法。