2015-06-18 15 views
5

in C++ se definisco una struttura come questaC allocazione di memoria ++ struct

struct ComplexFloat { 
    float r; 
    float i; 
}; 

e dichiaro due variabili come questa

struct ComplexFloat cf; 
float *f=(float*)cf; 

posso tranquillamente assumere che la seguente condizione sarà sempre vero

(&(cf.r)==&(f[0]) && &(cf.i)==&(f[1])) 

?

In altre parole, posso tranquillamente supporre che in una struttura contenente float, i suoi elementi occuperanno posizioni contigue in memoria e saranno ordinati secondo l'ordine in cui compaiono nella definizione della struttura?

Ho provato ed è il caso di gcc 4.8.2 su Ubuntu, voglio solo assicurarmi che sia sempre valido.

+0

Quell'espressione non verrà nemmeno compilata, 'cf' non è un array o un puntatore. –

+0

Se questo è per curiosità accademica, va bene, ma se è per codice di produzione, potresti voler ripensare il tuo design. –

+0

grazie @JoachimPileborg, ho corretto la domanda – oromoiluig

risposta

2

No, non si può presumere che sarò nel posto giusto a meno che non si controlli l'allineamento dei dati nella struttura. Potrebbe esserci un riempimento di allineamento tra r e i

+0

Devono essere nello stesso ordine però –