2015-06-18 13 views
5

in C++, wenn ich eine Struktur wie dieseC++ struct Speicherzuordnung

struct ComplexFloat { 
    float r; 
    float i; 
}; 

und ich erkläre zwei Variablen wie diese

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

definieren kann ich davon ausgehen, sicher, dass die folgende Bedingung immer wahr sein wird

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

?

Mit anderen Worten, kann ich sicher annehmen, dass in einer Struktur, die floats enthält, ihre Elemente zusammenhängende Positionen im Speicher belegen und in der Reihenfolge angeordnet werden, in der sie in der Definition der Struktur erscheinen?

I getestet und es ist der Fall mit gcc 4.8.2 auf Ubuntu, ich möchte nur sicherstellen, dass es immer gültig ist.

+0

Dieser Ausdruck wird nicht einmal kompiliert, 'cf' kein Array ist oder einen Zeiger. –

+0

Wenn dies für akademische Neugier ist, ist es in Ordnung, aber wenn es für Produktionscode ist, möchten Sie vielleicht Ihr Design überdenken. –

+0

dank @JoachimPileborg, korrigierte ich die Frage – oromoiluig

Antwort

2

Nein, Sie können nicht davon ausgehen, dass ich an der richtigen Stelle sein wird, wenn Sie die Ausrichtung von Daten in der Struktur zu steuern. Es könnte sein, die Ausrichtung padding zwischen r i und

+0

Sie müssen jedoch in der gleichen Reihenfolge sein –