【问题标题】:Double pointer to 2D指向二维的双指针
【发布时间】:2013-11-28 23:59:26
【问题描述】:

我有一个整数数组,我想创建一个双指针来指向这个数组。我假设这个一维整数数组实际上代表一个二维数组。例如,如果我有一个int A[2000*12],那么我有 12 行和 2000 行。问题是我不知道如何初始化指向数组A的指针。我最初的想法是这样的:

  int A[2000*12];
  int **ptr;
  ptr=&A[0];

这当然是不正确的。更准确地说,我收到以下错误: 赋值中不兼容的指针类型

【问题讨论】:

  • 当您执行ptr=&A[0] 时,您将获取第一个元素的地址(int *)。我不知道你为什么要双指针指向一维数组。
  • 我需要这个,因为这是一个更大计划的一部分。我实际上尝试将程序运行到不同的处理器架构(VLIW)中。为此,我必须通过给定的库函数传递函数的一些参数。最初我有一个双指针。然后我将所有数据从双指针传递到一维数组,现在我必须将这些数据返回到双指针

标签: arrays pointers pointer-to-pointer


【解决方案1】:

去掉[0]部分:

int A[2000*12];
int **ptr;
ptr = &A;

编辑: 然而,这并不能解决获取二维数组的问题。你还是不能像这样访问它

A[1][2] = 10;

因为编译器不知道行的长度。

我最喜欢的初始化二维数组的方式如下:

int width = 10;
int height = 20;
int *_a = (int *) malloc(width * height * sizeof(int));
int **a = (int **) malloc(height * sizeof(int *));

第一个分配创建二维数组,第二个分配创建一个指向每一行的数组。

int i, offset = 0;
for (i = 0; i < height; i++, offset += width)
{
    a[i] = _a + offset;
}

a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 2;
a[1][1] = 4;
// ...

【讨论】:

  • 感谢您的回答。我将尝试再次解释问题。最初我有一个双指针,它代表 2000 行和 12 行的双数组。然后我将这个双指针中的数据传递到一维数组中。所以在这个一维数组中,我将在前 12 个元素中有第一行,然后对于 index=13 直到 13+12,我将有第二行等。最后我想找到一种方法从一维数组中提取这些数据回到双指针!
  • 编辑了答案。看一下 for 循环。如果我的问题正确,这可能会解决您的问题,因为它执行从一维到二维(双指针)数组的预期转换。
  • 很高兴能帮上忙。如果您发现问题已回答,请将问题标记为已解决。
  • 我该怎么做?对不起,这实际上是我的第一篇文章,所以我在这里有点新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 2012-01-26
  • 1970-01-01
相关资源
最近更新 更多