如何在结构中分配内存和取消引用数组?

时间:2017-09-24 03:26:27

标签: c arrays pointers struct

我想知道如何在结构中访问双指针,例如:

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

在函数内部调用struct:

struct Example exmpl;

如果我需要在该数组数组中创建一个新数组,我将如何在函数/ main中调用它? 或者它与常规exmpl->set

相同

1 个答案:

答案 0 :(得分:0)

set的类型无关紧要,您可以使用exmpl.set访问它。如果您需要访问单个元素,例如exmpl.set[0][0]

如果你需要为它分配内存,你需要为外部数组分配内存,然后为每个内部数组分配内存,就像这样创建一个10x20的数组:

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的指针(它的工作方式类似于二维chars数组)