2

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

我的朋友刚刚编写了使用相同大小数组的函数,而我的函数在指针上,我需要传递他的数据。

4

3 回答 3

2
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 **`...
于 2013-03-12T13:39:59.040 回答
0

您不能更改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;
于 2013-03-12T13:57:12.117 回答
0

您不能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)。这非常快,但如果函数需要使用原始维度对数组进行操作,这将不起作用(因为它不是指针数组)。

于 2013-03-12T13:47:04.273 回答