簡體   English   中英

為什么打印 ch[1] 給出 2?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM