2013-06-16 11 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 

Mi sono imbattuto in questa domanda. Come sappiamo, possiamo solo inizializzare il primo membro dell'Unione. Ma in questo, al momento dell'inizializzazione, la variabile y viene inizializzata tramite un determinato metodo!Come spiegare questa C Union Output

Qualcuno può spiegare questo a me come k = {.Y = 97} sta rompendo la regola indicata nel libro di Dennis Ritchie "Unione possono essere inizializzati solo con un valore del tipo del suo primo membro" e l'inizializzazione seconda variabile invece?

+1

Chi ti ha detto è possibile inizializzare solo il primo membro di qualche 'union'? Questo è un errore (puoi inizializzare qualsiasi singolo membro di qualche sindacato). –

+2

Gli inizializzatori designati sono stati introdotti in c99. dmr non ne sapeva nulla negli anni settanta. – wildplasser

+0

Forse endianness ha invertito la regola. –

risposta

15

K & R è un ottimo libro, ma è vecchio. In C99 puoi farlo.

Utilizzando un inizializzatore designato nello stesso esempio, il seguente inizializza la seconda dell'età sindacalista:

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

Grazie per questo! –

+0

Dici "K & R ... è vecchio". Tendo a pensare, nel mondo dei computer, 35 anni (la prima edizione è stata 1978) è un po 'oltre il "vecchio" ... Anche la 2a edizione, che IIRC era del 1988, è "vecchia" ... – twalberg