2013-06-16 20 views
14
#include <stdio.h> 
union p 
{ 
    int x; 
    char y; 
} 
k = {.y = 97}; 

int main() 
{ 
    printf("%d\n", k.y); 
    return 0; 
} 

OUTPUT: 97 

Natknąłem się na to pytanie. Jak wiemy, możemy tylko zainicjować pierwszego członka Unii. Ale w tym momencie, w czasie inicjalizacji, zmienna y jest inicjowana przez pewną określoną metodę!Jak objaśnić tę C Union Output

Czy ktoś może wyjaśnić mi jak k = {.y = 97} łamie reguły zawartej w książce Dennisa Ritchiego „Unia może zostać zainicjowany wyłącznie z wartością typu jego pierwszego członu” i inicjowanie zamiast drugiej zmiennej?

+1

Kto ci powiedział, można tylko zainicjować pierwszy człon jakiegoś 'unia? To błąd (możesz zainicjować dowolnego członka jakiegoś związku). –

+2

Wyznaczone inicjatory zostały wprowadzone w c99. dmr o tym nie wiedział w latach siedemdziesiątych. – wildplasser

+0

Może endianness odwrócił zasadę. –

Odpowiedz

15

K & R to świetna książka, ale jest stara. W C99 Możesz to zrobić.

Korzystanie z wyznaczonego inicjatora w tym samym przykład, następujący inicjuje drugi wiek członkowskich Unii:

union { 
     char birthday[9]; 
     int age; 
     float weight; 
     } people = { .age = 14 }; 
+0

Dzięki za to! –

+0

Mówisz "K & R ... jest stary". Myślę, że w świecie komputerów, 35 lat (1. wydanie było 1978) jest nieco poza "starym" ... Nawet druga edycja, która była IIRC w 1988 roku, jest "stara" ... – twalberg