2012-04-02 5 views
2

p = (users *)malloc(sizeof(users));プレイリスト構造用のメモリも作成しますか?また、pを使ってplaylist.albumをどのように参照できますか?このmallocは2番目の構造ですか?

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 ないあなたの質問を参照するために

が、いくつかの良い例があります。 –

答えて

5

p = (users *)malloc(sizeof(users));あまりにもプレイリスト構造のためのメモリを作成するのでしょうか?

playlistは、users_のメンバであるため、割り当てられた領域の一部を形成します。あなたの質問に答えてください:はい。

[ところで、あなたがする必要はありません(とすべきでない)mallocの結果をキャスト。]

また、私は、pを使用してplaylist.album参照することができますか?

「参照」の意味によって異なります。 「アクセス」を意味すると仮定すると、

p->playlist.album 
+0

非常に明確な説明ありがとうございます。 –

0

はいそうです。 struct users_には、のインスタンスstruct playlist_が含まれています。したがって、前者のメモリを割り当てると後者のためのスペースも確保されます。一方

struct users_struct playlist_ポインタが含まれている場合、あなたはかつてのためのメモリを割り当てた後、後者のためにメモリを割り当てる必要があるだろう。 playlist.album使用p->playlist.album

関連する問題