我正在使用一个以2D数组作为参数递归调用自身的函数,但出现此错误:
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 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);
}
}
}
数组是隐式指针,因此您可以简化声明:
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);
}
}
}
void Rivers (int m[1000][1000],int n,int m1)
{
int i,j,z=1,cpt = 0;
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++;
}
}
}
int main() {
int m[1000][1000] = {};
Rivers(m, 10, 10);
return 0;
}
有趣的是,您的代码在C中编译时没有错误。