Re: [問題] 請問C的union

看板C_and_CPP作者 (Dannvix)時間15年前 (2010/05/24 21:02), 編輯推噓3(303)
留言6則, 4人參與, 最新討論串2/2 (看更多)
首先假設 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)

05/24 21:22, , 1F
喔喔 原來是這樣 因為前2個byte沒有初始 導致%d答案變很怪
05/24 21:22, 1F

05/24 21:23, , 2F
是這樣說是嗎? 感謝
05/24 21:23, 2F

05/24 21:47, , 3F
你可以參考這個: http://codepad.org/BHDxQaF4
05/24 21:47, 3F
revision: 修正錯字 ※ 編輯: Dannvix 來自: 125.227.102.51 (05/24 21:57)

05/24 22:29, , 4F
推今天剛剛教到這^^
05/24 22:29, 4F

05/25 00:28, , 5F
我絕對沒有看到關鍵字… (掩面
05/25 00:28, 5F

05/25 01:31, , 6F
關鍵字是??
05/25 01:31, 6F
文章代碼(AID): #1B-dZbo0 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1B-dZbo0 (C_and_CPP)