Re: [問題] 請問C的union
首先假設 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
05/24 21:22, 1F
→
05/24 21:23, , 2F
05/24 21:23, 2F
→
05/24 21:47, , 3F
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):