Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释包含结构的并集的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 - Fatal编程技术网

解释包含结构的并集的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)
为4
sizeof(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
};