0

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

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

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

4

1 回答 1

0

删除 [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;
// ...
于 2013-11-15T14:48:07.140 回答