如何将大小为n的2D int数组传递给C ++中的函数?

时间:2017-02-08 21:55:05

标签: c++ arrays multidimensional-array 2d parameter-passing

我只想将2d数组传递给函数,但C ++不像JAVA,并且不会让函数接受'int [] [] square'作为参数。显然我需要指定它的大小,但它的大小是一个变量n到n,用户输入。

2 个答案:

答案 0 :(得分:1)

使用

vector<vector<int> > a;

答案 1 :(得分:0)

C ++不支持所有维度的可变大小的2D数组类型。虽然您可以定义函数参数int arr[],甚至可以定义像int twoD[][10]这样的参数,但不支持int twoD[][]之类的参数。

让我通过使用一个解决方法来解释原因(这是一个hacky,容易​​出错,我不鼓励实际使用它,而且只是出于解释目的):

该函数接受一个参数,它是一个指向整数的指针,以及一个维度_x,它实际上代表每行的整数个数。然后,我们可以将指向整数的指针“处理”为指向整数2D数组的指针,因为我们通过取“row_number * dimension_x + column_number”来计算单元格的地址(行号和列号为{{1} } -indexed)。

请注意公式“row_number * dimension_x + column_number”,它需要“dimension_x”来计算单元格的位置。出于同样的原因,编译器可以处理0类型的参数,因为twoD[][10]被定义为dimension_x。相反,无法处理类型10的参数,因为编译器无法派生“dimension_x”,因此无法确定访问元素的位置,例如twoD[][]

twoD[2][1]

PUH;详细描述;希望它能解释一下这个问题。

因此请使用void func(int* startOf2DArray, int dimension) { int row = 2; int column = 1; int cellAtRow_Column = startOf2DArray[dimension*row + column]; printf("value at [%d][%d] is %d (should be 7)\n", row, column, cellAtRow_Column); } int main(void) { int dimension = 3; int myArray[3][3] = { {0,1,2},{3,4,5},{6,7,8} }; func (&myArray[0][0], dimension); return 0; } (或vector<vector<int> > &my2DArrayAsRef}:

vector<vector<int> > my2DArrayAsCopy