#include<stdio.h>
union u
{
int i;
char c[2];
};
void main()
{
union u x;
x.c[0]=13;
//它的赋值本质是在4个字节(因为有int i;语句,已经将i开辟了4个字节的空间)的空间里的左边第一个字节存放整型数10,即在???? ???? ???? ???? ???? ???? **???? ????**的最后8个?表示的字节上赋值为13,
//为什么上面的4个字节是问号呢?因为变量i没有赋值,是随机数。当完成x.c[0]后,变成了???? ???? ???? ???? ???? ???? 0000 1101,
x.c[1]=0;
//此句赋值完后,4个字节的空间变成了:???? ???? ???? ???? 0000 0000, 0000 1101,因此当访问变量i时,访问的是上面4个字节的值:???? ???? ???? ???? 0000 0000, 0000 1101,因为这4个字节中前面的两个 字节没有赋值,所以是随机数,每次访问变量i时,都会出现不一样的数//值。但是每次访问后2个字节的空间时,都不会变化,都是:左边第一个字节的是是10,即x.c[0],第二个字节的值是1, 即x.c[1]的值。
数组赋值时顺序c[0]=13 c[1]=0
按数组的顺序数值应该是13 0
但按内存字节存数规则 c[0]=13 c[1]=0
即为 c[0] :**** **** **** **** **** **** 00001101
c[0] c[1] :**** **** **** **** 00000000 00001101
0 13