我試圖重構我的代碼,使之更好/更可讀所以我想更改2- d變量數組分配如下C中傳遞可變大小2-d陣列起作用
// 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;
}
問題是我所有使用地圖的函數都需要int **map
,並且通過更改地圖的聲明來像我一樣,IDE告訴我incorrect type int[]* instead of int**
我應該使用什麼而不是int**
?在函數聲明中使用int[]* map
告訴我can't resolve variable map
'型FUNC(INT N,INT(*地圖)[N]);'調用'FUNC(號,地圖);' – BLUEPIXY
幫自己一個忙,只是創建一個平面數組,然後通過數組[y * width + x] = value來引用行; –
@MalcolmMcLean我在想這個,有沒有辦法分配一半的地圖大小,而不必擔心索引的順序?在我的地圖位置[i] [j]和[j] [i]將始終具有相同的值,但現在我分配兩倍所需的大小以便不必擔心i和j的順序。 –