【问题标题】:Passing Multidimensional Arrays into a Function将多维数组传递给函数
【发布时间】:2019-11-18 23:29:03
【问题描述】:

在扫描数组的大小后,我需要能够将二维数组传递给扫描函数。我看过的所有地方都告诉我,你不能将没有维度的二维数组传递给函数,但我不知道有其他方法可以做到这一点。


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.

【问题讨论】:

  • 这能回答你的问题吗? How to pass 2D array (matrix) in a function in C?
  • 嗨,丹,您的结束评论提到您是编程新手。我想你可能会发现this link 信息丰富。它并不否定答案。我希望它能提高你的理解力。您的问题的答案有效,因为它是在编译时进行评估的。在运行时期间,不能保证函数参数的评估顺序与指定的一致。我在自己的代码中得到了意想不到的结果,因为我之前没有完全理解这一点。

标签: c arrays multidimensional-array


【解决方案1】:

函数应该这样声明:

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的代码可以保持不变。

【讨论】:

  • 非常感谢,它成功了。不敢相信这是这么简单的事情。
猜你喜欢
  • 2014-01-15
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 2014-11-19
  • 2014-03-16
  • 2013-04-17
相关资源
最近更新 更多