2017-02-11 123 views
0

我有一個結構,它有2個參數,我創建了一個結構類型的1D指針數組,併爲它分配內存。這是發送到一個函數與值添加到它。下面的代碼。如何使用動態分配創建二維數組結構?

typedef struct { 
    char name[LENGTH]; 
    double use; 
} Task; 



Task *ctask; 
    task = malloc(8 * sizeof(*task)); 

insert (Task task[], name, use){ 
    //does something 
    task[i].name = name; 
    task[i].use = use; 
} 

我想知道的是如何創建一個類型爲struct(大小爲8 * 25)的指針的二維數組。並將其發送到函數insert()。

這是下面正確的:

Task **ctask; 
    task = malloc(8 * sizeof(*task)); 

for(int i=0;i<25;i++){ 
    task[i] = malloc(25 * sizeof(*task)); 
} 

當IM將其發送到插入功能是否需要改變或可我只是在發:

insert(task[i], name, use); 

感激任何反饋 感謝

回答

0

C中,您可以使用指向數組的指針(長度爲25)或數組(長度爲8 * 25)的數組(長度爲8)來指定一個二維數組。詳情請參閱The C Programming Language by K&R

對於第一種方法,

Task **taskArray = (Task **) malloc(8 * sizeof(Task *)); 
int n; 
for (n = 0; n < 8; n++) { 
    taskArray[n] = (Task *) malloc(25 * sizeof(Task)); 
} 
// access the row i, column j Task struct in the array 
// taskArray[i][j] 
// you will need its address/pointer to pass to insert function 
// &taskArray[i][j] or taskArray[i] + j 

對於第二種方法,

taskArray = (Task *) malloc(8 * 25 * sizeof(Task)); 
// access the row i, column j Task struct in the array 
// taskArray[i * 8 + j] 

關於調用Insert功能

Insert (Task task[], char *name1, double use) { 
    int i = getindex(name1); 
    task[i].name = name1; 
} 

從你的代碼中,task會名稱/結構數組的頭指針,你可以訪問它的第i個結構ct使用task[i]

對於一維數組,您只需將它的名稱或頭指針過去即可。

對於使用第一種方法的二維數組,taskArray是一個包含25個結構(寬度)的8個(深度)一維數組的數組。您可以撥打Insert這個1D陣列的每一個,只是傳遞他們的頭指針,taskArray[i]爲第i。

對於使用第二種方法的二維數組,除了必須將一維數組的索引轉換爲二維數組之外,它有相似的想法。對於第i個,8個1D陣列中的每一個的頭指針是taskArray[i * 8]

+0

嗨,我該如何調用這個2D數組的插入函數(對於你給出的兩個例子),只需發送第i行。因爲插入行調用另一個結來計算其索引j。對於1d數組,tge的功能如下。 – anisha

+0

插入(任務任務[],char * name1,雙重使用) { int i = getindex(name1); task [i] .name = name1; } – anisha

+0

您好, 的爲一維數組插入功能是如下: 插入(任務任務[],字符* NAME1,雙用途){ INT I = getindex(NAME1); task [i] .name = name1; } 在調用函數時,如何更改插入函數以獲得50個元素的1個數組。 – anisha