2010-06-02 15 views

Antwort

7

Lassen Sie uns das sezieren.

In allen Fällen sizeof(char) == 1 und die list Array wird seine drei Mitglieder an Speicherplatz list, list + 1 und list + 2 hat.

Die Situation mit der struct ist nicht ganz so klar. Der Standard garantiert, dass die Mitglieder in wachsenden Speicherbereichen zugewiesen werden, aber nicht, dass sie zusammenhängend sind. Dem Compiler steht es frei, Padding zwischen Mitgliedern und Padding am Ende einzuführen.

Daher wird s->a == 1 immer wahr sein. Wenn die Implementierung die unsigned char s in die struct angrenzende (und die meisten wird) setzt, dann werden die anderen Gleichheiten notwendigerweise wahr sein.

Übrigens kann das Aufrufen eines struct_struct Probleme verursachen. Ein mit einem Unterstrich im globalen Namespace beginnender Name ist für die Implementierung reserviert.

4

Ja, es hängt von der Speicherausrichtung und den Packregeln des Systems und des Compilers ab.

+0

Ist das ja kann er davon ausgehen, dass es als sein Beispiel ist, oder ja, es hängt von der Maschinenarchitektur ab? –

+0

"Ja, es hängt vom System ab ..." –

+0

Ich dachte, Endianness nur Auswirkungen Typen über 1 Byte und da dies eine Struktur ist und keine Gewerkschaften oder größere Typen verwendet werden, würde ich, obwohl dies sicher wäre? –

Verwandte Themen