如何在c++中将int[][]转换为int**

how to convert int[][] to int** in C++

本文关键字:int 转换 c++ 中将      更新时间:2023-10-16

是否有一种简单的方法将类型int[n][n]的实例转换为int** ?例如,代码

void foo(int** arr) {
// ...
}
int X[10][10];
memset(X,0,10*10*sizeof(int));
foo(X); // error: cannot initialize a parameter of type 'int **' with an lvalue of type 'int [10][10]'
当然,一个简单的解决方法是使用
int** X=new int*[10];
for (int i=0;i<10;++i) X[i]=new int[10];

,但这在某种程度上违背了c++数组只是指针的想法(1-dim数组当然是指针)。

没有。int[N][M]是一个连续的内存块(其中额外的维度是平坦的),带有一些语法糖,使编译器做数学运算来访问元素。

int **(实际上是int *[N])是一个完全不同的野兽,因为它使用了额外的间接连接,允许每一行驻留在其他地方;见鬼,你甚至可能有NULL行或不同长度的行。

OTOH如果你有一个"真正的"多维数组,并且需要一个int **,你可以通过只创建"指针索引"来弥合差距,并使其指向原始数组内部。

int *a[10];
for(int i=0; i<10; ++i) 
    a[i]=arr[i];