【问题标题】:Passing 2D int array from one function to another in c在c中将2D int数组从一个函数传递给另一个函数
【发布时间】:2017-04-12 07:26:21
【问题描述】:

例如,我有两个函数:第一个从 main() 获取高度和宽度并读取 2D int 数组

int read_price (int height, int width) { 
  int i, j;
  int array[height][width];

  printf("Enter your values:\n");

  for (i = 0; i < height; i++) {
    for (j = 0; j < width; j++) {
      scanf("%d", &array[i][j]); 
    }
  }
}

第二个函数从第一个函数中获取值并打印出来。

void print_array () {
  int i, j;
  for (i = 0; i < h; i++) {
    for (j = 0; j < w; j++) {
      printf("%d ", array[i][j]);
    }
    printf("\n");
  }
}

还有——问题!我应该如何在第一个函数中调用第二个函数(使用哪些参数)?以及我应该在第二个函数的名称中的括号之间写哪些参数。

我尝试以这种(以及其他)方式调用,但出现错误。

print_array (array[height][width]);

【问题讨论】:

    标签: c arrays function multidimensional-array


    【解决方案1】:

    在 C99 中,您可以使用可变长度的数组。在您的情况下,函数 print_array 的定义如下所示:

    void print_array (int height, int width, int array[height][width]) {
      int i, j;
      for (i = 0; i < height; i++) {
        for (j = 0; j < width; j++) {
            printf("%d ", array[i][j]);
        }
        printf("\n");
      }
    }
    

    你会这样称呼它:

    print_array(height, width, array);
    

    因为在 C 中您不是发送数组,只是发送指针,所以前面的定义等于发送指针(指向 width 整数数组)时的定义,您可以将其定义为:

    void print_array (int height, int width, int (*array)[width]) {
       ...
    }
    

    【讨论】:

    • 好的,但是我应该如何从第一个函数传递参数? print_array(height, width, array[][]); ?它抛出错误
    • 这似乎是最后一个问题。我编辑了它,就像你的答案一样,但首先我同样得到错误。然后我尝试在终端中用 gcc 编译它,但是作为 .c 文件。有效。在此之前,我将 Clion 中的代码编译为 .cpp。正常吗?
    • 我认为可变长度数组不是 C++ 的一部分。
    猜你喜欢
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    相关资源
    最近更新 更多