c语言加法 -858993459,C语言里struct和union的区别

在struct中,所有的成员都有自己的存储空间

在union中,所有的成员共用一块存储空间,内存分配大小与union中最大的一个数据类型相等。

1)在存储多个成员信息时,编译器会自动给struct每个成员分配存储空间,struct可以存储多个成员信息,而union每个成员会用同一个存储空间,只能存储最后一个成员信息。

2)都是由多个不同的数据类型成员组成,但在任何同一时刻,union只能存放一个被选中的成员,而结构体的所有成员都在。

3)对于union的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于struct的不同成员赋值,是互不影响的。

注:在很多地方需要对结构体的成员变量进行修改。只是部分成员变量,那么就不能用联合体union了,因为union的所有变量只占一个内存,就比如在链表中对个别数值进行赋值就必须用struct.

1、struct和union的内存大小以及union的大小计算和struct的内存对其问题

union大小计算准则:1、至少要容纳最大的成员变量 2、必须是所有成员变量类型大小的整数倍。所以u的大小并不是12,而是16,因为它必须是所有成员变量类型大小的整数倍。

struct内存对齐问题:s里边的a占一个字节,后边补3个字节和b加起来刚好8个字节,c占8个字节,后边的d占1个字节,考虑到内存对齐的问题,应向后边再补7个字节。如果后边再加一个int型参数,那么s所占的内存还是24个,这是d后边b

#include

struct S

{

char a; //1

int b; //4

double c; //8

char d; //1

}s;

union U

{

char a; //1

int b; //4

double c; //8

int arr[3];//12

}u;

int main()

{

std::cout << sizeof(s) << std::endl;

std::cout << sizeof(u) << std::endl;

return 0;

}

/*

输出结果

24

16

*/

2、union的成员赋值

#include

struct S

{

char a;

int b;

double c;

}s;

union U

{

char a;

int b;

double c;

}u;

int main()

{

u.a = 'a';

std::cout << u.a << " " << u.b << " " << u.c << std::endl;

u.b = 100;

std::cout << u.a << " " << u.b << " " << u.c << std::endl;

u.c = 20.2;

std::cout << u.a << " " << u.b << " " << u.c << std::endl;

return 0;

}

/*

输出结果

a 97 4.79244e-322

d 100 4.94066e-322

3 858993459 20.2

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值