#include<stdio.h>
union pw
{
int i;
char ch[2];
} a;
int main ( )
{
a.ch[0] = 0;
a.ch[1] = 13;
printf ( "%d\n", a.i ) ;
return 0;
}
#include<stdio.h>
union pw
{
int i;
char ch[2];
} a;
int main ( )
{
a.ch[0] = 0;
a.ch[1] = 13;
printf ( "%d\n", a.i ) ;
return 0;
}
因为使用的是联合体,特点是所有成员共享同一块内存。当你在代码中将 a.ch[0] 设置为 0 时,实际上也在清空 a.i 的值,接下来当你在代码中将 a.ch[1] 设置为 13 时,a.i 的值就变成了 3328。因为 a.i 和 a.ch[1] 共享相同的内存,修改了 a.ch[1],实际上也修改了 a.i。
在这个例子中,由于您将 a.ch[1] 设置为 13,所以二进制表示为 00001101。在大多数计算机系统中,int 类型是使用 4 个字节存储的,因此 a.i 就是:
0000 0000 0000 0000 0000 0000 0000 1101
由于您在前面将 a.ch[0] 设置为 0,所以实际上 a.i 的值就是:
0000 0000 0000 0000 0000 0000 0000 1101
十进制表示为 3328。