我尝试动态分配二维数组的一维。该数组声明如下:
uint16_t coord[][2];
我只需要分配行数,坐标数。 在Google上,我找到了足够的代码来分配这两个维度,从:
开始uint16_t **coord;
我不确定我是否仍然可以如上所述声明数组。我需要做什么:
uint16_t *coord[2];
是不是?
我还需要从分配函数返回数组(指向它的指针),以便其他函数可以像这样访问数组:
foo = coord[4][0];
bar = coord[4][1];
返回已分配数组的正确方法是什么?
答案 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 };
会给它三个元素。