10

我一直在尝试编写一个函数,它给出元素为 0 的行和列的索引。我尝试使用一个函数

void make_zero(int matrix[][],int row,int col)
{
    int row, col;
    int i,j;  

    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            if(matrix[i][j]==0){
                printf("%d %d\n", i, j);
        }

    }
}

但是在编译时它给出了错误“错误:数组类型具有不完整的元素类型”。我还尝试全局声明矩阵并给它一个指针。但这对我不起作用。帮我解决这个问题,我们如何将矩阵传递给 C 中的函数。

4

4 回答 4

12

试试这个

  void make_zero(int row, int col, int matrix[row][col])
  {
     int i,j;  
     for(i=0;i<row;i++)
        for(j=0;j<col;j++)
        {
            if(matrix[i][j]==0)
               printf("%d %d\n",i,j);
        }

  }
于 2013-09-06T15:58:54.397 回答
8

您的问题是 C 中的多维数组需要知道它们的长度,除了最外面的值。

您可以做的是将指针传递给保存矩阵的内存,然后将其转换为正确的类型:

void make_zero(void* _matrix,int row,int col)
{
    int i,j;  
    int (*matrix)[col] = _matrix;
    for(i=0;i<row;i++)
        for(j=0;j<col;j++)
        {
             if(matrix[i][j]==0){
                   printf("%d %d\n",i,j);
        }

    }
}
于 2013-09-06T15:58:10.913 回答
2

假设你int matrix[10][10];这样声明

make_zero(matrix,5,5); //function call 

void make_zero(int mat[][10],int row,int col) //definition   
{
//statements
}   

编辑:

只要传递的实际数组的第二维始终为 10,上述解决方案就可以工作您可以像这样使用@Jonathan Leffler 建议

 make_zero(5,5,matrix); //function call 
 void make_zero(int row, int col, int matrix[row][col]) //definition 
     {
     //statements
     }
于 2013-09-06T16:03:18.957 回答
1

矩阵作为 C 中函数的参数

我使用这些链接在 gcc C11/C99 中对这个问题做出了“终极”解决方案:

http://c-faq.com/aryptr/dynmuldimary.html

http://c-faq.com/aryptr/ary2dfunc3.html

于 2014-12-08T19:55:36.493 回答