调用带有2个二维数组作为参数的函数中的递归void会导致错误

问题描述 投票:0回答:1

我正在使用一个以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);
        }   
    }

 }
c function recursion void
1个回答
0
投票

数组是隐式指针,因此您可以简化声明:

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中编译时没有错误。

© www.soinside.com 2019 - 2024. All rights reserved.