解释包含结构的并集的sizeof运算符的结果 #包括 结构mystruct { char-cc; 浮动abc; }; 联合样本 { INTA; 浮球b; 字符c; 双d; 结构mystructs1; }; int main() { 联合样本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(联合样本); printf(“%d\n\n”,k); 返回0; }
运算符的大小返回解释包含结构的并集的sizeof运算符的结果 #包括 结构mystruct { char-cc; 浮动abc; }; 联合样本 { INTA; 浮球b; 字符c; 双d; 结构mystructs1; }; int main() { 联合样本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(联合样本); printf(“%d\n\n”,k); 返回0; },c,sizeof,structure,unions,C,Sizeof,Structure,Unions,运算符的大小返回8我仍然能够访问结构元素,一次访问多个,并且sizeof运算符仍然返回我假设的基本数据类型的最大大小。为什么会有这种行为?实际分配的大小是否为8?而sizeof返回了错误的值?或者实际分配的大小是8?那么结构是如何适应的??如果我们使用malloc和sizeof分配联合数组,在这种情况下它会分配足够的空间吗?请注明。通常,工会的规模是其最大成员的规模。最大的成员[很可能]是您的结构成员以及double成员。都是8号的。因此,正如sizeof正确地告诉您的,联合体的大小实际上是8
8
我仍然能够访问结构元素,一次访问多个,并且sizeof
运算符仍然返回我假设的基本数据类型的最大大小。为什么会有这种行为?实际分配的大小是否为8
?而sizeof
返回了错误的值?或者实际分配的大小是8
?那么结构是如何适应的??如果我们使用malloc
和sizeof
分配联合数组,在这种情况下它会分配足够的空间吗?请注明。通常,工会的规模是其最大成员的规模。最大的成员[很可能]是您的结构成员以及double
成员。都是8号的。因此,正如sizeof
正确地告诉您的,联合体的大小实际上是8
你为什么觉得奇怪?为什么称8为“错误值”?一个并集用于将多个成员放置在同一内存位置-一次不能使用多个成员。所有这些类型都重叠,因此联合的大小与最大成员的大小相同。联合类型是允许使用不同类型描述访问相同内存的特殊结构。例如,可以描述一个数据类型的联合,它允许读取与整数、浮点或用户声明类型相同的数据
#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;
}
在上述示例中,u的总大小是u.s的大小(即u.s.u和u.s.d的大小之和),因为s大于i和f。当将某些内容分配给u.i时,如果u.i小于u.f,则u.f的某些部分可能会被保留
union
{
int i;
float f;
struct
{
unsigned int u;
double d;
} s;
} u;
所以1+3+4=8字节。
我们知道内存将分配给union的最大成员。在我们的例子中,sizeof(double)=sizeof(struct mystruct)都是8。
sizeof(double)==8
,不要忘记结构对齐/填充。结构需要大小9
对吗???@sasidhar,对程序的一个修改:@sasidhar:9?9是从哪里来的sizeof(float)
为4sizeof(char)
为1。因此,您的结构至少需要5个字节。但为了对齐,它占据了8。为什么是9?@sasidhar:sizeof(float)你得到了什么?它如何适应结构中的成员???@sasidhar:how是什么意思?结构成员的大小可能是8(请检查)。工会的规模是8人。因此,联合体确实足够大,可以容纳struct成员。你认为问题出在哪里?
struct mystruct
{
char cc; //1 -byte
//3 bytes Added here for Padding
float abc; //size of float is 4-bytes
};