2016-03-04 29 views
1

添加一個結構來給定結構<code>Element</code>數組

typedef struct { 
    char someString[9] 
    int value; 
} Element 

和陣列elementList

Element elementList[5]; 

有一種簡單的方法來一個元素動態地添加到列表中的每個索引?我試圖創建一個函數add_element,它接受列表並修改它,但我更喜歡與Java的elementList[i] = new Element等效的東西。

+0

該數組的每個部分*已經是一個元素。你不需要做「新」,內存已經被分配,並且'elementList [1]'可以被直接尋址(儘管它可能包含垃圾,除非你初始化它......) – tucuxi

回答

4

有沒有必要,該陣列結構實例。

你可以做例如爲:

strcpy(elementList[0].someString, "foo"); 
elementList[0].value = 4711; 

這是不可能在Java中,這裏的一切是一個參考,但在C你可以做到這一點。如果您想一個一堆NULL -able引用,在C你使用指針:

Element *elementList[5]; /* An array of 5 pointers to type Element. */ 

然後,你必須使用例如堆分配,以確保有足夠空間訪問前Element

elementList[0] = malloc(sizeof *elementList[0]); /* This might fail! */ 
elementList[0]->value = 17; 
1

正如聲明,您已經創建Element實例的5個元素的數組;無需分配新的Element對象。你可以繼續讀/分配每個元素的每個成員:

element[i].value = some_value(); 
strcpy(element[i].someString, some_string()); 

如果你想模仿Java方法,你會做類似如下:

Element *elementList[5]; // create elementList as an array of *pointers* to Element 
... 
elementList[i] = malloc(sizeof *elementList[i]); // dynamically allocate each element 

注意在這種情況下,你會使用->運營商,而不是運營商.訪問每個Element成員,因爲每個elementList[i]指針Element,不是Element斯塔nce:

elementList[i]->value = some_value(); 
strcpy(elementList[i]->someString, some_string()); 

無論哪種情況,數組大小都是固定的;您無法增大或縮小陣列中元素的數量。

相關問題