s.a[0] (低地址)
0x88
低字节
s.a[1] (高地址)
0x77
高字节
代码分析:这段C代码定义了一个联合体s,包含一个2字节的字符数组a[2]和一个整数b(假设为2字节)。整数0x7788被赋值给s.b。由于联合体共享内存,s.a[0]和s.a[1]分别对应s.b的低字节和高字节。
在小端序系统中,数据的低字节存储在低内存地址,高字节存储在高内存地址。
对于值0x7788:
0x88是低字节,存储在s.a[0]0x77是高字节,存储在s.a[1]printf("%x", s.a[1]);输出s.a[1]的值,即0x77。
在大端序系统中,数据的高字节存储在低内存地址,低字节存储在高内存地址。
对于值0x7788:
0x77是高字节,会存储在s.a[0]0x88是低字节,会存储在s.a[1]如果系统是大端序,printf("%x", s.a[1]);会输出0x88。
注意:示例中假设整数b为2字节。在实际的32位或64位系统中,int通常是4字节。如果是4字节整数,0x7788在内存中会被扩展为0x00007788,存储方式类似。
在小端序系统中,0x7788在内存中被存储为0x88(低地址)和0x77(高地址)。
代码s.a[1]访问的是联合体的第二个字节(高地址),其值为0x77,因此printf输出77。