二维数组的初始化是如何工作的?

3

在一个小的C++示例中,我遇到了下面所示的代码:

int (*arr1)[ARRAY_SIZE];
int (*arr2)[ARRAY_SIZE];
int (*arr3)[ARRAY_SIZE];

然后在类的构造函数中:

ParallelMultiply::ParallelMultiply(int mat1[ARRAY_SIZE][ARRAY_SIZE],

                   int mat2[ARRAY_SIZE][ARRAY_SIZE], 

                   int result_mat[ARRAY_SIZE][ARRAY_SIZE]):arr1(mat1), 

                   arr2(mat2), 

                   arr3(result_mat)
{

}

在这里,ParallelMultiply是一个类,mat1、mat2和result_mat是二维数组,ARRAY_SIZE是定义的数组长度。但是,如何使用二维数组初始化arr1、arr2和arr3呢?请解释一下。

谢谢!


初始化列表进行浅拷贝,这是您想要的吗?还是您需要深度拷贝? - Tamer Shlash
2个回答

1

你可能熟悉数组可以衰减为指针,然后该指针可以像数组一样使用(只要其实际范围已知)的方式。

当对多维数组执行此类操作时,您将获得一个指向具有一个较少数组绑定的数组的指针。然后,该指针可以像多维数组一样使用。

因此,arr1[i][j]mat1[i][j]是相同的int并且具有相同的地址。

请注意,由于该类仅复制对2D数组的指针,因此用户需要确保这些数组参数的生命周期足够长。通过该类进行的任何修改都将发生在原始数组中。


解释得很清楚!答案加一分 :) - Izza

0

arr1,arr2arr3都是指针。每个指针都指向大小为ARRAY_SIZE的数组。


由于数组和指针之间的交互方式,因此 &(arr1[i][j]) == &(mat1[i][j]) - aschepler
等等,不是指向指针的数组,而是指针数组。 - aschepler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接