如何在c++中将int[][]转换为int**
how to convert int[][] to int** in C++
是否有一种简单的方法将类型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];
相关文章:
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将字符串中的 int 转换为字母;
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何将矢量<int>转换为字符数组?
- C++ 无法从 const int* 转换为 const_iterator
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 如何将 int[4] 转换为 std::array<int,4>?
- 如何将data[i].int转换为vaible
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将私有矩阵形式 int 转换为双 C++
- 无法将参数 1 从 'int' 转换为 'int &'
- 将 int 转换为字符串后始终得到 0
- isspace 函数的性能警告,从 int 转换为布尔值
- 将大 int 转换为浮点数,而不舍入 c++
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将未签名的INT转换为BCD
- 在 C++ 中将 int 转换为双精度