我有数组: int i[20][30]
。使int**
指针使用它的最快方法是什么?
我的朋友刚刚编写了使用相同大小数组的函数,而我的函数在指针上,我需要传递他的数据。
我有数组: 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)。这非常快,但如果函数需要使用原始维度对数组进行操作,这将不起作用(因为它不是指针数组)。