我想通过使用双指针合并两个一维数组来创建一个二维数组,这是我的代码(同样的东西在 C++ 中会是什么样子?):
#include "stdio.h"
int main()
{
int a[]={1,2,3,4,5};
int b[]={6,7,8,9,0};
int **p;
p=a;
(++p)=b;
printf("%d",p[0][2]);
return 0;
}
编译显示错误:
kek.c:7:4: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
p=a;
kek.c:8:8: error: lvalue required as left operand of assignment
(++p)=b;
最佳答案
你正在尝试做的可能是这样的:
int a[]={1,2,3,4,5};
int b[]={6,7,8,9,0};
int **p = new int*[2 * sizeof(int*)];
*p = a;
*(p + 1) = b;
...
delete[] p;
在您的代码中,p
已被初始化,引用未分配的指针是一个严重的问题(大多数情况下是 SEGMENTATION_FAULT)。重要提示:delete[] p
以取消分配动态内存分配,而您不需要取消分配 a
和 b
,因为它们在堆栈上。
请注意,int a[]
与int* a
相同,因此您可以为*p
分配一个内存地址.
编辑
@Bob__ 是对的。你真的不需要动态分配。一个简单的直接列表 初始化(或像他的示例中那样复制列表)就足够了。
int *(p[2]){a, b};
关于c++ - 如何将双指针分配给数组? C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54608417/