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