我有一个值的整数数组,我想创建一个指向该数组的双指针。我假设这个一维整数数组实际上代表一个二维数组。例如,如果我有一个,int A[2000*12]
那么我有 12 行和 2000 行。问题是我不知道如何初始化指向数组A的指针。我最初的想法是这样的:
int A[2000*12];
int **ptr;
ptr=&A[0];
当然,这是不正确的。更准确地说,我收到以下错误:分配中的指针类型不兼容
我有一个值的整数数组,我想创建一个指向该数组的双指针。我假设这个一维整数数组实际上代表一个二维数组。例如,如果我有一个,int A[2000*12]
那么我有 12 行和 2000 行。问题是我不知道如何初始化指向数组A的指针。我最初的想法是这样的:
int A[2000*12];
int **ptr;
ptr=&A[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;
// ...