請看代碼:
#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