晕,看到3楼我以为你已经解决了这个问题了呢.
还是union定义的问题
什么叫联合体?联合体抽象点来说就是几个数据占用同一段内存,形象点来说就是几个数据同居.
所以这个联合体在内存中占4个字节
这里我们抽象的用每一个[]代表一个字节.
[][][][]
s->i[0]=0x0039;之后
[00111001][00000000][][]这里"0x0039"占用了2个字节
s->i[1]=0x0038;之后
[00111001][00000000][00111000][00000000]这里"0x0038"也占用了2个字节
但是呢,因为union内所有的数据是共享这段内存地址的,于是我们有
c[0]=[00111001]
c[1]=[00000000]
c[2]=[00111000]
c[3]=[00000000]
所以c[0]的值是57,而57就是字符9的ascii值
所以printf("%c",s->c[0]);输出字符9
自然,如果是printf("%c",s->c[2]);则输出字符8
因为c[2]=[00111000]=56也就是字符8的ascii值.