union在小端下的數據表示

請看代碼:

#include <stdio.h>
#include <stdlib.h>
int main()
{
union Tag_uMyUnion{
int i;
short s;
char ch;
}*p, u;
p = &u;
u.i = 0x12345678;
short *ps = (short*)&u;
printf("%#p\n", *ps );
printf("%#p\n", *(ps+ 1) );
printf("%x, %#p, %#p, %#p\n", &(u.i), u.ch, u.s, u.i);
return 0;
}

輸出結果爲:

在小端的情況下,0x12345678佔用4個字節,在union中的內存分佈如下,低字節在低地址:

78 56 34 12

short*型指針ps只指向低位的兩個字節(78 56),讀取字節內容時,因爲低字節爲78,高字節爲56,所以*ps的值爲0x7856。

u.ch只佔用一個字節:0x78

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章