[英]Why does printing ch[1] give 2?
#include <stdio.h>
int main()
{
union a
{
int i;
char ch[2];
};
union a z = { 512 };
printf("%d %d %d", z.i, z.ch[0], z.ch[1]);
}
輸出:
512 0 2
為什么打印ch[1]
給出2
?
如您所知,在一個聯合中,所有成員都從內存中的同一個位置開始。 所以ch[2]
從與i
相同的地方開始。 512 = 0x00000200。 所以,在小端,第一個字節是00
,第二個是02
。
你的聯合有 4 個字節,並被分配了 512,這意味着你有
00:00:00:00-00:00:00:00-00:00:00:10-00:00:00:00
因為 512 是后面有 9 個零的 1。
從這里很容易理解您的印刷品。
正如@Some 程序員兄弟評論的那樣,這是由於二進制數看起來像 + 字節序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.