如何正确传递数组涉及指针?

时间:2016-05-10 15:32:14

标签: c arrays pointers

我正在编写一个代码,使用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);

我确定将数组作为指针传递是一个问题,但我不太熟悉这里的规则。任何帮助表示赞赏。

1 个答案:

答案 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);
}