【发布时间】:2012-07-25 12:59:56
【问题描述】:
#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?那么结构是如何容纳的?如果我们使用malloc 和sizeof 分配一个联合数组,它会在这种情况下分配足够的空间吗?请详细说明。
【问题讨论】:
-
sizeof(double) == 8不要忘记结构对齐/填充。 -
结构需要
9的大小对吗?? -
@sasidhar,对您的程序进行一项修改:ideone.com/2HhTn
-
@sasidhar:9? 9是从哪里来的?
sizeof(float)是 4。sizeof(char)是 1。因此,您的结构至少需要 5 个字节。但出于对齐目的,它占用 8 个。为什么是 9 个? -
@sasidhar:
sizeof(float)得到什么?