2017-07-18 6 views
1

Ich sah mehrere Fragen zu diesem Thema .Aber meine Frage nicht resolved.Links sein könnte:geschachtelte Strukturen Speicherzuweisung

Structure memory allocation, Allocating memory for nested structure pointer, Understanding Nested Structures

Grundsätzlich Speicher zugewiesen wird, wenn wir die Instanz erstellen eine Struktur nicht, wenn wir sie definieren. Was also, wenn ich ein Objekt einer anderen Struktur in dieser Struktur schaffen also so etwas wie dies machen:.

struct a{ 
int c; 
}; 

struct b 
{ 
struct a obj; 
}; 

ist jetzt Speicher struct a Objekt gegeben, wenn wir es in struct b erklären (wir es auch durch Zeiger tun können, aber Was ist, wenn wir das mögen?

+0

Da es noch keine Instanz von "b" gibt, kann den Mitgliedern kein Speicher zugewiesen werden. –

Antwort

2

In Ihrem Fall ist struct b auch eine (andere) Deklaration, genau wie struct a.

Hier findet keine Speicherzuordnung statt. Der Compiler muss wissen, ob eine Variable dieses Typs definiert werden soll und wie viel Speicher zugewiesen werden soll. Nur weil ein Mitglied einer Struktur eine andere Struktur ist, heißt das nicht, dass dort Speicher reserviert werden muss. Sobald Sie eine Variable des Typs haben, wird die Speicherzuweisung stattfinden.

Nur zu beachten, der innere Strukturtyp muss deklariert werden, bevor er als Element des äußeren Typs verwendet wird.

+0

Vielen Dank :) –

+0

Ich würde upvote, wenn ich genug Reputationspunkte hatte. –

0

Der C-Compiler verwaltet eine separate Umgebung mit den von Ihnen definierten Datentypen. Diese Umgebung wird im generierten Code nicht gelöscht, aber für den Fall, dass Sie eine Variable mit einem Typ aus dieser Umgebung definieren, wird der C-Compiler die Informationen aus dieser Umgebung betrachten (geändert durch Ihre struct id {...} Deklarationen).