2017-09-24 63 views
-2

我不知道我怎麼會訪問一個雙指針內部的結構,例如:如何在結構中分配內存並取消引用數組數組?

typedef struct Example { 
    char **set; 
    int size; 
}Example; 

的結構被稱爲函數內部爲:

struct Example exmpl; 

如果我需要創建一個新的該數組數組中的數組,我將如何在函數/ main中調用它? 或者它與普通相同,exmpl->set

+0

是的,我需要分配它! –

+0

結構中沒有「數組數組」!指針不是數組(反之亦然)。 – Olaf

+0

嘗試發佈代碼,先爲'char * set;'成員做這個,然後詢問'char **集合;' – chux

回答

0

無論您的set類型是什麼,您都可以通過exmpl.set進行訪問。例如,如果您需要訪問單個元素,則它將爲exmpl.set[0][0]

如果需要爲它分配存儲器,則需要用於外陣列獨立地分配存儲器中,然後針對每個內部陣列,像這樣以創建10×20的陣列:用於設置每個

struct Example exmpl; 
exmpl.set = malloc(10 * sizeof(char*));  // 10 "arrays" in the set 
for (int i = 0; i < 10; i++) 
    exmpl.set[i] = malloc(20 * sizeof(char)); // 20 chars within each "array" 

然後元素的值:

for (int i = 0; i < 10; i++) 
    for (int j = 0; j < 20; j++) 
     exmpl.set[i][j] = calculate(i, j); 

而且,數組和指針是不同的,所以你在這裏的是一個指針的指針爲char(其工作方式類似於字符的2維數組)

+1

[關於轉換'malloc()']的結果(https://stackoverflow.com/ q/605845/2410359) – chux

+0

不要忘記設置'exmpl.size = 10;'。 –

+0

感謝您指點我正確的方向!即使它是一個字符串數組,我仍然需要使用for循環嗎? –