gpt4 book ai didi

c - 解释包含结构的 union 的 sizeof 运算符的结果

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:24 25 4
gpt4 key购买 nike

#include<stdio.h>
struct mystruct
{
char cc;
float abc;
};
union sample
{
int a;
float b;
char c;
double d;
struct mystruct s1;
};
int main()
{
union sample u1;
int k;
u1.s1.abc=5.5;
u1.s1.cc='a';

printf("\n%c %f\n",u1.s1.cc,u1.s1.abc);
k=sizeof(union sample);
printf("%d\n\n",k);
return 0;
}

运算符的大小正在返回 8 我仍然能够访问结构元素,一次不止一个而且 sizeof 运算符仍然返回最大大小我假设的原始数据类型。为什么会出现这种行为?实际分配的大小是8吗? sizeof 返回错误值?或者实际分配的大小是 8?那这个结构是怎么容纳的??如果我们使用 mallocsizeof 分配 union 数组,它会在这种情况下分配足够的空间吗?请详细说明。

最佳答案

通常, union 的大小是其最大成员的大小。最大的成员 [可能] 是您的结构成员以及 double 成员。两者的大小都是 8。因此,正如 sizeof 正确告诉您的那样,并集的大小确实是 8。

为什么觉得奇怪?为什么称 8 为“错误值”?

关于c - 解释包含结构的 union 的 sizeof 运算符的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11642859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com