作者Dannvix (Dannvix)
看板C_and_CPP
標題Re: [問題] 請問C的union
時間Mon May 24 21:02:26 2010
首先假設 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
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