2017-09-24 32 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循环吗? –