c - 将多维数组传递给函数

标签 c arrays multidimensional-array

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


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.

最佳答案

函数应该这样声明:

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

关于c - 将多维数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58924446/

相关文章:

c - 在哪里创建宏变量?和变量的大小?

c - 数学函数在现代处理器上需要多少周期

java - 将方阵旋转 90 度

c++ - 从C++中的对象中获取数组

c - if出错的情况下的赋值

c - 如何在 Windbg 中打印 C 结构的数据

java - 如何修复将使用 JNI 传输到 Java 的二维数组代码?

javascript - 根据另一个数组的排序顺序对数组进行排序的数据结构或过程

c++ - g++ 编译数组,其大小在运行时由 const 值(不是 constexpr)给出

python - Python Numpy 数组中的 double 元素