我正在编写一个代码,使用djikstra算法找到迷宫中的最短路径。
当我通过我的数组时,我得到了
warning "passing argument 1 of 'traverse' from incompatible pointer type"
expected 'int (*)[(sizetype)(n)]' but argument is of type 'int **'
我最初初始化并在main中分配了我的矩阵:
int **mat;
mat = (int **)malloc(sizeof(int *)*n);
for(i=0; i<n; i++){
mat[i]=(int *)malloc(sizeof(int)*n);
}
我正在通过
创建一个函数void traverse(int mat[n][n], int src){
然后我在这里主要调用此函数
traverse(mat, 0);
我确定将数组作为指针传递是一个问题,但我不太熟悉这里的规则。任何帮助表示赞赏。
答案 0 :(得分:0)
int **mat
是一个&#34;指针指向int&#34;。
int mat[n][n]
,因为函数参数与int (*mat)[n]
相同,是&#34;指向int&#34;的数组n的指针。
第一个指向一个指针,秒,指向一个数组 - 不是同一类型。
而不是将mat
传递给traverse()
,而不是int mat[n1][n2]
,而是传递为int **
。也通过了2个维度。
// void traverse(int mat[n1][n2], int src){
void traverse(int **mat, size_t n1, size_t n2, int src) {
...
-
建议的分配代码更改
int **mat;
size_t n1 = foo();
size_t n2 = foo();
mat = malloc(sizeof *mat * n1);
for(size_t i=0; i<n1; i++){
mat[i]= malloc(sizeof *(mat[i]) * n2);
}