C中的联合大小

时间:2017-07-10 15:55:22

标签: c unions

union的size等于其中最大成员的大小。但在下面的联合中,大小显示为8字节。 int和float的大小是4字节。为什么它会显示8个字节?

union data {
    int i;
    float f;
    char *str;
};

5 个答案:

答案 0 :(得分:6)

sizeof(char *)是指针的大小。 对于32位机器,它通常为4,对于64位机器,通常为8。 鉴于你的结果,我把它当作64位机器。

答案 1 :(得分:5)

#include <stdio.h>

union data_t {
  int i;
  float f;
  char *str;
};

int main()
{
  union data_t data;
  printf("%zu\n%zu\n%zu\n", sizeof (data.i), sizeof (data.f), sizeof (data.str));
  printf("\nsizeof(char*): %zu\nsizeof(char): %zu\n", sizeof(char *), sizeof(char));
}

输出:

$ ./a.out 
4
4
8

sizeof(char*): 8
sizeof(char): 1

答案 2 :(得分:2)

在Windows 64 / Linux 64上尝试以下代码,结果应该是8,在32位系统上应该是4。

int main(void)
{
    char * str;

    printf("%d\n",sizeof(str));

    return 0;

}

答案 3 :(得分:2)

联合的大小=使用的最大数据类型的大小

union所占用的内存足够大,可以容纳联盟中最大的成员。目前使用的东西并不重要。例如,

union Data 
 {
   int i;
   float f;
   char str[20];
 } data; 

现在,Data类型的变量可以存储整数,浮点数或字符串。这意味着单个变量,即相同的存储器位置,可用于存储多种类型的数据。数据类型将占用20个字节的内存空间,因为这是字符串可以占用的最大空间。

答案 4 :(得分:-2)

如果你的编译器默认使用double for float,那么sizeof(float)就是8.只需printf(&#34;%d&#34;,sizeof(float));检查它。