在我的主要功能中,我创建了一个动态3D数组,并成功地对其进行了分配。
int ***board = (int ***)malloc(counter * sizeof(int **));
for(int i = 0; i < counter; i++){
board[i] = (int **) malloc(dimension[i] * dimension[i] * sizeof(int));
}
然后我想将它传递给定义为:
的函数void readPuzzle(int board[][MAX][MAX], int *dimension, int counter,const char *);
我这样传递:
readPuzzle(board, dimension, counter, argv[1]);
但我一直收到这个错误,我搜索它但从来没有解决过它!
main.c: In function ‘main’:
main.c:22:13: warning: passing argument 1 of ‘readPuzzle’ from incompatible pointer type [-Wincompatible-pointer-types]
readPuzzle(board, dimension, counter, argv[1]);
^~~~~
In file included from main.c:4:0:
headers.h:7:6: note: expected ‘int (*)[100][100]’ but argument is of type ‘int ***’
void readPuzzle(int board[][MAX][MAX], int *dimension, int counter, const char *);
答案 0 :(得分:0)
如果您的2D数组具有可变维度,则需要int ***
,但此原型
void readPuzzle(int board[][MAX][MAX], int *dimension, int counter, const char *);
与board
传递的int ***
不兼容,因为它需要一个2D数组数组,而不是三重指针。
所以解决它:
void readPuzzle(int ***board, int *dimension, int counter, const char *);
但您仍需要跟踪每个&#34;切片&#34;的尺寸。
另一种选择,如果2D数组具有固定的维度MAX*MAX
,则分配一个2D数组数组,如下所示:
int (*board)[MAX][MAX] = malloc(counter*sizeof(*board));
现在您可以将board
作为int board[][MAX][MAX]
传递。当然,如果不是所有数据都被使用,您仍然需要在某处跟踪最大尺寸。