c++ - 如何将双指针分配给数组? C/C++

标签 c++ c arrays pointers

我想通过使用双指针合并两个一维数组来创建一个二维数组,这是我的代码(同样的东西在 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 以取消分配动态内存分配,而您不需要取消分配 ab,因为它们在堆栈上。

请注意,int a[]int* a 相同,因此您可以为*p 分配一个内存地址.


编辑

@Bob__ 是对的。你真的不需要动态分配。一个简单的直接列表 初始化(或像他的示例中那样复制列表)就足够了。

int *(p[2]){a, b};

关于c++ - 如何将双指针分配给数组? C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54608417/

相关文章:

c - 归并排序程序出错

c++ - C , C++ 非同步线程返回一个奇怪的结果

.net - 通过 COM 可见 DLL 从 VB6 调用 .NET 方法

javascript - 奇怪的 Javascript 警报输出

c++ - 当目标类有多个构造函数时消除强制转换运算符的歧义

c++ - 为什么 'std::endl' 在语句 'std::cout << std::endl;"中使用时需要命名空间限定,给定参数相关查找?

我可以从程序 (DLL) 调用的 C++ 或 C 编译器

javascript - Node.js:无法使用 Expect 测试输入

c++ - 替换失败是依赖非类型模板参数的错误吗?

c++ - 写入文件中间(不覆盖数据)