2012-04-02 12 views
2

Wird p = (users *)malloc(sizeof(users)); Speicher für die Playlist-Struktur erstellen? Wie kann ich reply.allbum mit p referenzieren?Wird das malloc die zweite Struktur?

struct playlist_ { 
    int album; 
    int track_num; 
    struct playlist_ *next; 
}; 

struct users_ { 
    int user_ID; 
    struct playlist_ playlist; 
    struct users_ *next; 
}; 

typedef struct playlist_ playlists; 
typedef struct users_ users; 

users *p; 
p = (users *)malloc(sizeof(users)); 
+0

http://stackoverflow.com/questions/4982339/malloc-of-struct-array-with-varying-size-structs Nicht Ihre Frage zu verweisen, hat aber einige gute Beispiele . –

Antwort

5

Wird p = (users *)malloc(sizeof(users)); auch Speicher für die Wiedergabeliste Struktur?

playlist ist ein Mitglied der users_, so dass er bildet einen Teil des zugewiesenen Speicherplatz. Also, um deine Frage zu beantworten: ja.

[Übrigens brauchen Sie nicht (und sollte nicht) das Ergebnis der malloc gegossen.]

Auch, wie kann ich playlist.album mit p verweisen?

Hängt davon ab, was Sie mit "Referenz" meinen. Angenommen, Sie meinen nur "Zugang", dann ist dies:

p->playlist.album 
+0

Danke sehr klare Erklärung. –

0

Ja, es wird. struct users_ enthält eine Instanz von struct playlist_, so dass die Zuweisung von Speicher für die ersteren auch Platz für letztere reserviert.

Auf der anderen Seite, wenn struct users_ einen Zeiger-struct playlist_ enthalten würden Sie Speicher für die letztere nach Speicher für die ehemalige Zuweisung zuweisen müssen.

Um playlist.album Verwendung p->playlist.album

Verwandte Themen