4

我正在尝试将二维数组从一个函数传递给另一个函数。但是,数组的大小不是恒定的。尺寸由用户决定。

我曾尝试对此进行研究,但运气不佳。大多数代码和解释都是针对恒定大小的数组。

在我的函数A中,我声明了变量,然后对它进行了一些操作,然后必须将其传递给 Function B

void A()
{
      int n;
      cout << "What is the size?: ";
      cin >> n;

      int Arr[n-1][n];

      //Arr gets manipulated here

      B(n, Arr);
}

void B(int n, int Arr[][])
{
    //printing out Arr and other things

}
4

3 回答 3

11

std::vector如果您想要动态大小的数组,请使用:

std::vector<std::vector<int>> Arr(n, std::vector<int>(n - 1));
B(Arr);

void B(std::vector<std::vector<int>> const& Arr) { … }
于 2013-10-28T07:30:06.440 回答
3

C++ 不支持变长数组。拥有 C99 并仅编译 C,您可以像这样传递数组:

#include <stdio.h>

void B(int rows, int columns, int Arr[rows][columns]) {
    printf("rows: %d, columns: %d\n", rows, columns);
}

void A() {
    int n = 3;
    int Arr[n-1][n];
    B(n-1, n, Arr);
}


int main()
{
    A();
    return 0;
}

注意:将 extern "C" { } 放在函数周围并不能解决 C++ 与 C99 的不兼容问题:

  g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2:
  error: use of parameter ‘rows’ outside function body
  error: use of parameter ‘columns’ outside function body
  warning: ISO C++ forbids variable length array
于 2013-10-28T09:49:48.577 回答
3

数组大小需要保持不变。或者,您可以使用std::vector<std::vector<int>>来表示动态二维数组。

于 2013-10-28T07:30:05.127 回答