我不知道我怎麼會訪問一個雙指針內部的結構,例如:如何在結構中分配內存並取消引用數組數組?
typedef struct Example {
char **set;
int size;
}Example;
的結構被稱爲函數內部爲:
struct Example exmpl;
如果我需要創建一個新的該數組數組中的數組,我將如何在函數/ main中調用它? 或者它與普通相同,exmpl->set
?
我不知道我怎麼會訪問一個雙指針內部的結構,例如:如何在結構中分配內存並取消引用數組數組?
typedef struct Example {
char **set;
int size;
}Example;
的結構被稱爲函數內部爲:
struct Example exmpl;
如果我需要創建一個新的該數組數組中的數組,我將如何在函數/ main中調用它? 或者它與普通相同,exmpl->set
?
無論您的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維數組)
[關於轉換'malloc()']的結果(https://stackoverflow.com/ q/605845/2410359) – chux
不要忘記設置'exmpl.size = 10;'。 –
感謝您指點我正確的方向!即使它是一個字符串數組,我仍然需要使用for循環嗎? –
是的,我需要分配它! –
結構中沒有「數組數組」!指針不是數組(反之亦然)。 – Olaf
嘗試發佈代碼,先爲'char * set;'成員做這個,然後詢問'char **集合;' – chux