看板 C_and_CPP 關於我們 聯絡資訊
首先假設 sizeof(int) 為 4 bytes,所以 sizeof(data) 亦為 4 bytes 你可以直接輸出 HEX 來看看到底是如何 先來看看輸出: $ ./union sizeof(int) = 4 sizeof(data) = 4 data.a = 0x5fbf0201 可以知道因為是 little-endian,所以 data.a 的最後 2 bytes 是 data.b[0] 與 b[1] 剩下的 0x5f 與 0xbf 都是 undefined values (不同機器應該會不同) 然後,下面是 code: union UDATA { int a; char b[2]; }; int main (void) { union UDATA data; data.b[0] = 1, data.b[1] = 2; printf("sizeof(int) = %d\n", sizeof(int)); printf("sizeof(data) = %d\n", sizeof(data)); printf("data.a = %#x\n", data.a); return 0; } ※ 引述《spadina (wow)》之銘言: : 小弟在寫c遇到一個union問題 : union Udata{ : int a; : char b[2]; : }; : int main() : { : union Udata data; : data.b[0]=1; : data.b[1]=2; : print("%d",data.a); : return 0; : } : 想請問一下 print出來的結果是什麼 是怎麼算的? : 自己run一下程式 發現答案很怪 不太瞭解 麻煩高手解答一下 感謝 : ps:32bit的cpu 環境下 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.227.102.51 ※ 編輯: Dannvix 來自: 125.227.102.51 (05/24 21:03)
spadina:喔喔 原來是這樣 因為前2個byte沒有初始 導致%d答案變很怪 05/24 21:22
spadina:是這樣說是嗎? 感謝 05/24 21:23
Dannvix:你可以參考這個: http://codepad.org/BHDxQaF4 05/24 21:47
revision: 修正錯字 ※ 編輯: Dannvix 來自: 125.227.102.51 (05/24 21:57)
yuanyu90221:推今天剛剛教到這^^ 05/24 22:29
chrisQQ:我絕對沒有看到關鍵字… (掩面 05/25 00:28
yuanyu90221:關鍵字是?? 05/25 01:31