union的size等于其中最大成员的大小。但在下面的联合中,大小显示为8字节。 int和float的大小是4字节。为什么它会显示8个字节?
union data {
int i;
float f;
char *str;
};
答案 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));检查它。