C - malloc二维数组,当一个大小已知时

时间:2017-04-20 14:38:19

标签: c

我如何malloc一个n元素的数组,我知道每个元素都是两个字符的数组?

我尝试过类似的东西,但编译器说它无效:

char *candidates_top[2] = malloc(sizeof(char[2]) * n);

3 个答案:

答案 0 :(得分:4)

像这样:

char (*candidates_top)[2] = malloc(sizeof(*candidates_top)*n);

您需要从里到外读取新变量candidates_top的类型:candidates_top是一个指向(*...)的指针,指向两个元素[2]的数组属于char类型。这就像你用

创建一个n整数数组
int *intArray = malloc(sizeof(*intArray)*n);

唯一的区别是,在candidates_top的情况下,数组元素本身就是数组。

索引正如您所期望的那样:

candidates_top[7][0] = '4';
candidates_top[7][1] = '2';

答案 1 :(得分:1)

声明

char *candidates_top[2];

candidates_top声明为两个指向char的指针的数组。您似乎希望candidates_top成为指向两个char数组的指针

char (*candidates_top)[2];

答案 2 :(得分:0)

如果这让你的耳朵出血:

char (*candidates_top)[2] = malloc(sizeof(*candidates_top)*n);

您可以使用typedef

进行清理
typedef char twos[2];
//....
twos *candidates_top=malloc(sizeof(twos)*n);