是否有一种简单的方法可以将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数组肯定是指针)的想法。
答案 0 :(得分:1)
不。引擎盖下的int[N][M]
是一个连续的内存块(其中额外的维度是扁平的),带有一些语法糖,使编译器可以进行数学访问。
int **
(实际上int *[N]
)是一个完全不同的野兽,因为它使用了一个额外的后续间接,允许每一行驻留在别处;哎呀,你甚至可能有NULL行或不同长度的行。
OTOH如果你有一个“真正的”多维数组并需要一个int **
,你可以通过只创建“指针索引”来弥补差距,并使其指向原始数组。
int *a[10];
for(int i=0; i<10; ++i)
a[i]=arr[i];