2017-10-18 105 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]; 
}; 

什麼也不做,但聲明的類型。在這種情況下,包含一些指針,一些整數和指針數組的結構。如果現在定義類型的變量:

struct room MyRoom; 

可變MyRoom將被自動分配的內存2個指針,2個整數,和整個陣列。您不必分別分配數組 - 它是結構的一部分。如果你想在那裏放置字符串,你可能可能必須爲nametype分配內存,除非你只是想給它們分配其他地方分配的字符串地址。

現在,如果您希望該數組的某個元素指向某個結構,那麼只需將該結構的地址放在該結構中即可。 結構在內存中存在是一個新問題。

1

不,你不需要分配空間connections。它是一個指針數組,而不是指向數組的指針。該陣列包含在room結構的內存中。

您可能需要爲分配給陣列元素的房間分配內存。但是你也可以指定struct room變量的地址。

1
struct room* connections[MAX_CONNECTIONS]; 

創建一個指向房間的指針數組。給定的MAX_CONNECTIONS大小。 如果是安全的

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

相關問題