分配二维数组的一维并返回

时间:2012-06-20 08:27:08

标签: c arrays

我尝试动态分配二维数组的一维。该数组声明如下:

uint16_t coord[][2];

我只需要分配行数,坐标数。 在Google上,我找到了足够的代码来分配这两个维度,从:

开始
uint16_t **coord;

我不确定我是否仍然可以如上所述声明数组。我需要做什么:

uint16_t *coord[2]; 
是不是?

我还需要从分配函数返回数组(指向它的指针),以便其他函数可以像这样访问数组:

foo = coord[4][0];
bar = coord[4][1];

返回已分配数组的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

根据clockwise/spiral rule,以下声明:

uint16_t *coord[2];

是两个指针的数组,似乎不是你想要的。但是你可以改为使用它:

uint16_t (*coord)[2];

您可以像这样分配内存:

coord = malloc(num_entries * sizeof(uint16_t[2]));

现在您可以将其作为普通的多维数组进行访问:

coord[0][0] = 1;
coord[0][1] = 2;
coord[1][0] = 3;
coord[1][1] = 4;

答案 1 :(得分:0)

你正在混合数组和指针,这些不一样。

uint16_t coord[][2];

是一种不完整的类型,因为您没有定义一个维度。您可以使用初始化程序修复该维度。看起来你并不是很熟悉这个概念,所以你用一维的方式做得更好:

uint16_t line[] = { 1, 2, 3 };

会给它三个元素。