【发布时间】:2017-07-26 21:19:24
【问题描述】:
我正在尝试重构我的代码以使其更好/更具可读性,因此我正在尝试更改二维变量数组分配,如下所示
// OLD CODE
int **map;
map = calloc(number, sizeof(int *));
if (!(map)) {
free(map);
return 1;
}
for (int i = 0; i < number; i++) {
map[i] = calloc(number, sizeof(int));
if (!(map[i])) {
while (--i >= 0) {
free(map[i]);
}
free(map);
return 1;
}
}
// NEW CODE
int (*map)[number] = malloc(sizeof (int[number][number]));
if (!(map)){
free(map);
return 1;
}
问题是我所有使用 map 的函数都采用 int **map 并像我所做的那样更改 map 的声明,IDE 告诉我 incorrect type int[]* instead of int**
我应该用什么来代替int**?在函数声明中使用int[]* map 告诉我can't resolve variable map
【问题讨论】:
-
type func(int n, int (*map)[n]);致电func(number, map); -
帮自己一个忙,只需创建一个平面数组,然后通过 array[y*width+x] = value; 引用行
-
@MalcolmMcLean 我在想,有没有办法分配一半的地图大小而不必担心索引的顺序?在我的地图位置 [i][j] 和 [j][i] 将始终具有相同的值,但现在我分配所需大小的两倍,而不必担心 i 和 j 的顺序。
-
要清楚,新代码
map不是二维数组。它是一个“指向 int 数组编号的指针”。旧的map是pointer to pointer to int -
顺便说一句:为什么
calloc((number - 1), sizeof(int *))中的 -1?当然旧代码与以下for (int i = 0; i < number; i++) { map[i] = calloc(number, sizeof(int));...不正确