4453: 【例】结构体(struct)和联合体(union)区别
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:4
解决:3
题目描述
在 struct 中,每个成员都有自己的内存空间,在 union 中,所有成员共享同一块内存空间,union 的大小取决于其最大的成员
struct 中的成员可以同时存在,每个成员都有自己的地址,union 中的成员共享相同的内存,同一时刻只能存储一个成员的值
struct 的大小等于其所有成员大小的总和,每个成员都有独立的内存空间,union 的大小等于其最大成员的大小,各变量共享内存
样例输入 复制
样例输出 复制
提示
#include <iostream>
using namespace std;
/*
定义结构体 MyStruct
内包括3个变量,这3个变量被组织到一起,可以同时使用
*/
struct MyStruct {//占用空间必须是最大占用空间变量的整数倍
//i 占用4个字节 需要补4个字节够8个字节,因为后面够8个字节 (8)
int i;
//d 占用8个字节 (8)
double d;
//c 占用1个字节 需要补7个字节到8个字节 (8)
char c;
};//所以 MyStruct总共占用24个字节
struct MyStruct1 {//占用空间必须是最大占用空间变量的整数倍
//i 占用4个字节 需要补4个字节够8个字节,因为后面够8个字节 (8)
int i;
//d 占用8个字节 (8)
double d;
//用4个字节 和后面c一起补足8个字节 (j,c一起再补足3个字节) (8)
int j;
//c 占用1个字节
char c;
};//所以 MyStruct1总共占用24个字节
struct MyStruct2 {//占用空间必须是最大占用空间变量的整数倍
//i 占用4个字节 需要补4个字节够8个字节,因为后面够8个字节 (8)
int i;
//d 占用8个字节 (8)
double d;
//j用4个字节 补足8个字节 (8)
int j;
//d1 占用8个字节 (8)
double d1;
//c 占用1个字节 补足8个字节 (8)
char c;
};//所以 MyStruct1总共占用40个字节
/*
定义一个联合体 MyUnion
内包括3个不同类型变量 这3个变量同时只能使用一个
占用空间,联合体变量占用空间最大的变量
*/
union MyUnion {
int i;//i占用4个字节
double d;//d占用8个字节
char c;//c占用1个字节
};//联合体占用空间为8个字节
int main() {
cout << "struct占用内存空间大小:" << sizeof(MyStruct) << " bytes" << endl;
cout << "struct1占用内存空间大小:" << sizeof(MyStruct1) << " bytes" << endl;
cout << "struct2占用内存空间大小:" << sizeof(MyStruct2) << " bytes" << endl;
cout << "union占用内存空间大小:" << sizeof(MyUnion) << " bytes" << endl;
MyStruct s;
s.i = 42;
s.d = 3.14;
s.c = 'A';
cout << "Struct的值: " << s.i << ", " << s.d << ", " << s.c << endl;
MyUnion u;
u.i = 42;
cout << "联合体i的值: " << u.i << endl;
u.d = 3.14;
cout << "联合体重新赋值后d的值: " << u.d << endl;
return 0;
}