代码
#include <stdio.h>
#include <string.h>
union share
{
int num;
char str[3];
}share1;
int main()
{
strcpy(share1.str,"ab");
printf("str is %s and num is %d", share1.str, share1.num );
return 0;
}
我输出&#34; str是ab,num是25185&#34;。 str按原样打印,但如何获得25185。
答案 0 :(得分:1)
工会在内存中重叠。这意味着代表您的int
的2个字节与字符串的前2个字符(字节)共享相同的内存位置。更改字符会自动更改int,因为根据定义它们是相同的东西......只是被区别对待,因为您可以将这两个字节作为char或int访问。
a -> 0x61
b -> 0x62
25185 -> 0x6261
^--- a
^----- b
答案 1 :(得分:1)
“ab”的实际十六进制编码为:0x616200
重要的是联合的实例位于文件全局空间中 所以内存“预先设置”到所有0x00。
取决于体系结构,(小或大Endian)该值 “ab”将被理解为:
0x00006261 or as 0x61620000
如果打印数量很小,很明显 整数表示为0x00006261。 (小端)
0x00006261(十六进制)是25185(十进制)