簡體   English   中英

為什么以下C代碼輸出1?

[英]Why does the following C code output 1?

#include <stdio.h>
union p
{
    int x;
    char y;
} k = {1, 97};
int main()
{
    printf("%d\n", k.y);
}

這是代碼。 當我用67輸出將97替換為1時,如何打印該1

您的編譯器實際上應該警告您有關“過多的初始化程序”或類似內容的信息。 嘗試啟用更多警告(針對gcc / clang個人建議: -std=c11 -Wall -Wextra -pedantic )。

使用union ,初始化程序(沒有指定符)總是初始化第一個union成員。 您不能讓一個union多個成員同時持有一個值,它們都共享相同的內存,因此初始化一個以上的對象是沒有意義的。 如果您使用指示符,則最后一個“獲勝”。

您的編譯器僅刪除97並使用1初始化px 這並不能保證讀py會給您1 ,但是在小字節序的計算機上會發生這種情況。

因為除struct之外的union覆蓋了其成員。 初始化兩個成員都沒有意義。

您的程序是未定義的-您只能初始化聯合的一個成員,因為占用的所有成員都存儲在同一地址。 令您驚訝的是,您的C編譯器沒有為此感到興奮,您是否禁用了警告? 一旦跳入未定義狀態,就不會告訴編譯器將做什么。

因為它是一個並集,所以只需要一個初始化值。 第二個被忽略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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