union里面的所有成员共用同一块内存, 这里int是4个字节, long也是4, char是1字节. 那么这个union需要占用这三个里面的最大, 也就是4个字节.
不论是a, 还是b, 都能够完整存储0x12345678, 这个十六进制刚刚好4字节.
但是c是unsigned char, 只能读1个字节, 但是x86是小端模式, 内存的起始地址存放的是最后的一个字节, 也就是0x78, 所以c十六进制输出78
m.c就是m.b的第一个字节
由于windows系统字节存储是先低后高,所以m.b=0x12345678在内存中的实际四个字节序是0x78 0x56 0x34 0x12
union类型是所有成员共享同一块内存,因此m.c就是m.b的第一个字节,所以值为0x78
printf中输入m.c是用%x,即16进制输出,因此m.c=0x78,输出值就是78