将矩阵作为函数中的参数传递

use*_*823 9 c matrix

我一直在尝试编写一个函数,它给出了元素为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);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

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

hac*_*cks 8

试试这个

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

  }
Run Code Online (Sandbox Code Playgroud)

  • 您不必指定数组参数范围内的行数;你必须知道有多少行,这样你就不会越界。也就是说,您可以编写:“void make_zero(int col, int matrix[][col], int row)”,然后迭代行数,但它会产生奇怪的调用序列。如果你有接口 `void make_zero(int col, int matrix[][col]){ int row; ...; for (int i = 0; i &lt; row; i++) ...`,那么您将使用未初始化的变量作为数组的边界,这不太可能带来幸福。 (2认同)

Ser*_* L. 6

你的问题是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);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)