2010-06-02 10 views

risposta

7

Analizziamo questo.

In tutti i casi, sizeof(char) == 1, e il list matrice avrà suoi tre membri a locazioni di memoria, listlist + 1 e list + 2.

La situazione con lo struct non è altrettanto chiara. Lo standard garantisce che i membri verranno allocati in posizioni di memoria crescenti, ma non che saranno contigue. Il compilatore è libero di introdurre il padding tra i membri e il padding alla fine.

Pertanto, s->a == 1 sarà sempre vero. Se l'implementazione inserisce i valori unsigned char nell'adiacente (e quasi tutti), le altre uguaglianze corrisponderanno necessariamente a struct.

A proposito, chiamare struct_struct può causare problemi. Un nome che inizia con un trattino basso nello spazio dei nomi globale è riservato all'implementazione.

4

Sì, dipende dall'allineamento della memoria e dalle regole di imballaggio del sistema e del compilatore.

+0

È sì che può presumere che sia come il suo esempio, o sì, dipende dall'architettura della macchina? –

+0

"Sì, dipende dal sistema ..." –

+0

Pensavo che endianness eseguisse solo i tipi con più di 1 byte e poiché si tratta di una struttura e non vengono utilizzati sindacati o tipi più grandi, sarebbe comunque sicuro? –

Problemi correlati