0

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

uint16_t coord[][2];

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

uint16_t **coord;

我不确定我是否仍然可以像上面那样声明数组。我需要做:

uint16_t *coord[2]; 

或不?

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

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

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

4

2 回答 2

5

根据顺时针/螺旋规则,声明如下:

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;
于 2012-06-20T08:37:18.097 回答
0

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

uint16_t coord[][2];

是不完整的类型,因为您没有定义一个维度。您将通过使用初始化程序来修复该维度。似乎您并不真正熟悉该概念,因此最好先使用一维概念进行热身:

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

会给它三个元素。

于 2012-06-20T08:38:04.333 回答