如何从作为C中结构成员的指针访问数组中的值

时间:2012-09-12 00:18:02

标签: c pointers multidimensional-array struct

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

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

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

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

typedef struct {
int** mymap;
} THE_STRUCT

在我的程序中,我想通过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!

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

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:3)

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

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

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

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

相反,您可以将int [M][N]转换为int (*)[N] - 一个指向N - 长度数组数组的指针。