【发布时间】:2019-12-29 18:32:24
【问题描述】:
我正在使用一个以二维数组作为参数调用递归函数的函数,但出现此错误:
In function 'void Rivers(int (*)[1000], int, int)':
cannot convert 'int (**)[1000]' to 'int* (*)[1000]' for argument '1' to 'void Horizontal(int* (*)[1000], int, int, int, int, int*)'
这里是函数:
void Rivers (int m[1000][1000],int n,int m1)
{
int i,j,z=1,cpt;
for(i=0;i<n;i++)
{
for (j=0;j<m1;j++)
{
Horizontal(&m,i,n,m1,j,&cpt);
printf("river number %d is %d blocks in size\n",z,cpt);
z++;
}
}
}
这里是递归的 void:
void Horizontal(int*m[1000][1000],int i,int n,int m1,int j,int*cpt)
{
if(i<n && j<m1)
{
if(*m[i][j]!=0)
{
*m[i][j]=0;
*cpt++;
Vertical(&*m,i,n,m1,j,&*cpt);
Horizontal(&*m,i,n,m1,j-1,&*cpt);
Horizontal(&*m,i,n,m1,j+1,&*cpt);
}
}
}
【问题讨论】:
-
你知道
&m给出了数组/指针参数在堆栈上的位置吗?这很少是你想要的。在没有看到更多代码的情况下,我会说您可能需要int m[1000][1000]作为每个函数参数,并传递m。 -
...
int cpt也是 未初始化 但您正在间接增加它,同样适用:传递cpt而不是那些花哨的东西。 -
Weather Vane 当我调用 Horizontal 时,我的矩阵中的值应该会发生变化,传递 int m[1000][1000] 会在 void 执行结束后恢复所有更改
-
不,数组衰减为指向其第一个元素的指针。只有一个数组:最初传递给调用者的那个数组,函数通过指针对其进行处理。
-
但这确实意味着除了第一个值之外所有值都会改变,对吧?