这里我有一个10的数组。我怎么能把它变成2×5的二维数组。
double arr1D[10] = {1,2,3,4,5,6,7,8,9,10};
我想要的2D阵列是什么样的:
double arr2D[2][5] = {1,2,3,4,5},{6,7,8,9,10};
如果我有一个指向数组的指针,我该怎么办?有点像这样:
double arr1D[10];
double*ptr;
ptr = arr1D;
答案 0 :(得分:0)
让我们仔细看看你的arr1D
在记忆中的样子:
+---+---+---+---+---+---+---+---+---+----+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | +---+---+---+---+---+---+---+---+---+----+
这是一段简单而连续的记忆。
现在arr2D
在内存中的样子怎么样?实际上就是一样!
所以最简单的方法就是使用例如std::copy_n
从一个数组复制到另一个数组:
double arr1D[10] = {1,2,3,4,5,6,7,8,9,10};
double arr2D[2][5];
std::copy_n(&arr1D[0], 10, &arr2D[0][0]);
对于最后一个代码段,您没有“2D数组”。相反,指针变量ptr
将指向arr1D
的第一个元素。然后,您几乎可以在使用ptr
时使用arr1D
(最大的区别是sizeof arr1D != sizeof ptr
)。