将多维数组传递给函数

4
我需要在扫描数组的大小后将2D数组传递给扫描函数。我已经看了很多资料,都说不能将没有维数的2D数组传递给函数,但是我不知道还有其他方法来实现。

void scan_arrays (int *array, int row, int column);

int main (void){

  int row;
  int column;

  printf("Enter sizes: ");
  scanf("%d %d",&row,&column);


  int firstarray[row][column];
  int secondarray[row][column];

  printf("Enter array 1 elements:\n");
  scan_arrays(&firstarray,row,column);

  printf("Enter array 2 elements:\n");
  scan_arrays(&secondarray,row,column);

  for(int i = 0; i < row; i++){
    for(int j = 0; j < column; j++){
      printf("%d ",firstarray[i][j]);
    }
    printf("\n");
  }

  for(int i = 0; i < row; i++){
    for(int j = 0; j < column; j++){
      printf("%d ",secondarray[i][j]);
    }
    printf("\n");
  }

  return 0;
}

void scan_arrays (int *array, int row, int column){

  for(int i = 0; i < row; i++){
    for(int j = 0; j < column; j++){
      scanf("%d",&array[i][j]);
    }
    printf("\n");
  }

}```
I've only been coding for a couple of months.

这个回答解决了你的问题吗?如何在C语言中将二维数组(矩阵)传递给函数? - Bob__
嗨,丹,你的结束评论提到你是新手程序员。我想你可能会发现这个链接有用:https://en.cppreference.com/w/c/language/eval_order。它并不否定答案。我希望它能提高你的理解。你的问题的答案之所以有效,是因为它在编译时被评估。在运行时,函数参数的评估顺序不是保证按照指定的顺序进行的。我曾经在自己的代码中遇到过意外的结果,因为我之前没有完全理解这一点。 - Andrew Falanga
1个回答

5

该函数应该这样声明:

void scan_arrays (int row, int column, int array[row][column]);

同样地,对于函数定义的第一行也是如此。参数rowcolumn必须首先出现,以便它们在array参数中使用时处于作用域内。在数组维度中的row在技术上是多余的,但这是代码自我记录的简单方法。
该函数将如下调用:
scan_arrays(row, column, firstarray)

剩下的代码可以保持不变。


在定义数组之前,对用户输入进行一些验证是一个好主意:如果他们输入垃圾、0、负数或导致堆栈溢出的大数值,将会引起麻烦。后者的问题可以通过动态分配来避免:

int (*firstarray)[column] = malloc( sizeof(int[row][column]) );
if ( firstarray == NULL )
    // ...error handling

同时,使用firstarray的代码可以保持不变。


1
非常感谢,它起作用了。简单到我都不敢相信。 - dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接