#include <stdio.h>
int main()
{
union Data
{
char str[20];
int i;
float f;
}data;
data.i=20;
data.f=220.5;
printf("%d\n",(data.i));
return 0;
}
输出为:1130135552。我在 Ubuntu 16.04 LTS 上使用 gcc 编译器。
有人可以解释一下输出吗?
成员data.i
and data.f
占用相同的内存位置,所以输出应该是220。但是为什么输出是1130135552?
正如你已经知道的那样union
内部成员之间共享内存位置。的情况下union
编译器分配的内存等于成员的最大大小,并为所有成员使用相同的内存。
因此当你执行data.f=220.5;
, 之间的共享内存位置i
and f
保持data.i=20;
被覆盖为新值(220.5),二进制表示如下:
现在,当这个值被读取为有符号整数时int
它将被解释为不进行转换1130135552
以十进制表示。因此你得到1130135552
.
此外,如果您想使用 union 的所有成员,那么 struct 就是答案。
struct Data
{
char str[20];
int i;
float f;
} data;
data.i=20;
data.f=220.5;
printf("%d\n",data.i);
For more information on union
and struct
Please refer the following from Difference between Structure and Union https://www.geeksforgeeks.org/difference-structure-union-c/:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)