2D数组指向指针



我有数组:int i[20][30]。什么是最快的方法,使int**指针上使用它?

我的朋友刚刚写了一个函数,它使用相同大小的数组,我的函数是指针,我需要传递他的数据。

int a[20][30];       // data as 2D array
int *ap[20];         // array of pointers
for (j = 0; j < 20; ++j)
    ap[j] = a[j];    // convert array to pointers
// can now pass `ap` to function expecting `int **`...

您不能将int i[20][30]更改为int **,除非手动查看数据并构建它。
但是,c++中的每个xD数组都是一个1D数组,以某种复杂的方式访问成员。

的例子:

#define MaxX 20
#define MaxY 30
int i[MaxX][MaxY];
...
//When you write:
i[x][y] = something;
//It's actually been translate to:
i[x * MaxY + y] = something;

你不能有一个直接指向该数组的int **指针,这将没有任何意义。如果你想访问数组作为一个内存块,你可以使用:

int *p = (int *)i; // you can go to up (p + 20*30)

否则需要一个指向int[30]数组的指针,即

int (*p)[30] = &i[0]; // points to first row

对于第一个,由于强制转换,您可以定义:

int **p2 = &p;

可以通过*(*p2 + n)访问数组。你已经抛弃了数组的维度,但只要你在指针计算中使用它们,它就都是有效的,即*(*p2 + 35)引用第2行,第6列(一行30,加上下一行的元素5)。这是非常快的,但是如果函数需要使用原始维度对数组进行操作,这将不起作用(因为它不是指针数组)。

相关内容

  • 没有找到相关文章