如何为数组分配双指针? C/C++

Posted

技术标签:

【中文标题】如何为数组分配双指针? C/C++【英文标题】:How to assign a double pointer to arrays? C/C++ 【发布时间】:2019-02-09 16:53:14 【问题描述】:

我想通过使用双指针合并两个一维数组来创建一个二维数组,这是我的代码(同样的东西在 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;

【问题讨论】:

用vectors怎么样 我不熟悉向量。我在哪里可以了解它们? 你根本无法做你想做的事。例如,a 不是 int** 类型。用调试器浏览一下,看看发生了什么。 你可以在这里了解向量:geeksforgeeks.org/vector-in-cpp-stl 请先决定您是使用 C 还是 C++。这些是非常不同的语言! 【参考方案1】:

你想要做的可能是这样的:

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;

【讨论】:

请注意,在发布的用例中,不需要动态分配:wandbox.org/permlink/cL0Yp7zeSSSxZsBm 好的,谢谢!但是你能给我写一些代码来做我刚刚在这里画的吗? i.imgur.com/9vljEt5.jpg

以上是关于如何为数组分配双指针? C/C++的主要内容,如果未能解决你的问题,请参考以下文章

如何调用具有双指针作为参数的内核?

双结构指针的分配

如何在函数中分配双指针的内存?

双指针将 char 数组值分配给 char 数组,结构使用 char 指针

在结构内分配双指针结构?

为数组分配空间