1

我搜索了stackoverflow并看到了我的问题中单词的每个组合,但不是我的问题。

我有一个整数数组,它恰好是一个二维数组。

const int themap[something][something] = { {0, ...

我有一个结构,我想在我的程序中有一个指向这个数组的指针

typedef struct {
int** mymap;
} THE_STRUCT

在我的程序中,我想通过结构的指针迭代数组的值,但是如果我尝试通过 . 句法

int value;
THE_STRUCT mystruct;
mystruct = (int**) themap;

...
//access the map data from mystruct's pointer?
value = mystruct.mymap[x][y];
//doesn't seem to return correct values

如果我直接使用数组(作为全局变量),则将结构从图片中取出,相同的函数可以工作

int value;
...
//access the map directly
value = themap[x][y]
//everyone is happy!

我想使用该结构,因为它实际上将携带其他信息以及我需要能够将指针分配给具有不同数据的其他数组的事实。

4

2 回答 2

5

您的二维数组与int **. 如果要在 中存储指向它的指针struct,可以执行以下操作:

const int themap[something1][something2] = { {0, ...

typedef struct {
    const int (*mymap)[something2];
} THE_STRUCT;

...

THE_STRUCT my_struct;
my_struct.mymap = themap;

...

int value = my_struct.mymap[x][y];

可以使用int **但需要一些努力:

const int themap[something1][something2] = { {0, ...
const int * themapPointerArray[something1] = {themap[0], themap[1], ..., themap[something1 - 1]};

typedef struct {
    const int **mymap;
} THE_STRUCT;

...

THE_STRUCT my_struct;
my_struct.mymap = themapPointerArray;

...

int value = my_struct.mymap[x][y];
于 2012-09-12T00:25:27.267 回答
3

多维数组int [][]和双间接指针int **是两个完全不同的东西。

对于 C 来说,多维数组是一个以不同方式索引的一维数组。说xint [3][4]。然后,x包含 12 个按顺序排列的元素,并且x[1][2]只是该一维数组的第 6 个元素。

被视为二维数组的双间接指针是指向数组的指针数组。因此,如果yis int **,则y[1][2]表示“数组的第三个元素由”的第二个元素指向y

因此,您不能在 and 之间进行转换int [][]int **因为它们只是代表不同的事物(您的int [][]to 转换int **会导致int [][]数组中的整数被视为指针,这将不可避免地崩溃)。

相反,您可以转换int [M][N]int (*)[N]-- 指向N-length 数组的数组的指针。

于 2012-09-12T00:26:38.217 回答