2017-10-18 53 views
-1

ここで本当に素人な質問ですが、C言語をよりよく理解しようとしています。 、要素を割り当てる前にポインタ配列を割り当てる必要がありますか?

struct room { 
    char* name; 
    char* type; 
    int max_cons; 
    int curr_cons; 
    struct room* connections[MAX_CONNECTIONS]; 
}; 

私の質問があり、それは私がそれに他の構造体を割り当てようとする前に、私は接続のアレイ用のスペースを割り当てることが必要である:私は、この構造体は、ここに宣言していますか?もしそうなら、私はループを使用して各位置のスペースを割り当てるか、それを行うより効率的な方法がありますか?ありがとう

+2

'connections'はポインタの配列です。この配列はすでに割り当てられています。しかし、各ポインタの指し示されたデータは他の場所に割り当てられるべきです。 –

答えて

1

あなたのコード:

struct room { 
    char* name; 
    char* type; 
    int max_cons; 
    int curr_cons; 
    struct room* connections[MAX_CONNECTIONS]; 
}; 

は何もしませんが、型を宣言。この場合、いくつかのポインタ、いくつかのint、およびポインタの配列を持つ構造体。 2つのポインタ、2つのint型、およびアレイ全体の

struct room MyRoom; 

変数MyRoomが自動的に割り当てられますメモリ:あなたは今、その型の変数を定義する場合。配列を別々に割り当てる必要はありません。構造体の一部です。 は、他の場所に割り当てられた文字列のアドレスを割り当てたい場合以外は、文字列を入れたい場合はnametypeのメモリを割り当てる必要があります。

ここで、その配列のいくつかの要素が構造体を指し示すようにするには、そこに構造体のアドレスを置くだけです。メモリにがあるので、構造が新しい質問です。

1

いいえ、connectionsの領域を割り当てる必要はありません。これは、配列へのポインタではなく、ポインタの配列です。アレイはroom構造体のメモリに含まれています。

配列の要素に割り当てる部屋のメモリを割り当てる必要があります。しかし、struct roomの変数のアドレスを割り当てることもできます。

1
struct room* connections[MAX_CONNECTIONS]; 

部屋へのポインタの配列を作成します。指定されたMAX_CONNECTIONSサイズ。 の場合がそうしても安全である

connections[0] = malloc(sizeof(struct room)); 

など

関連する問題