我搜索了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!
我想使用结构,因为它实际上会携带其他信息,以及我需要能够将指针分配给具有不同数据的其他数组。
答案 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,多维数组是以不同方式索引的一维数组。说x
是int [3][4]
。然后,x
包含12个顺序打包的元素,而x[1][2]
只是该一维数组的第6个元素。
被视为二维数组的双间接指针是指向数组的指针的数组。因此,如果y
为int **
,则y[1][2]
表示“y
的第二个元素指向的数组的第三个元素。”
因此,您无法在int [][]
和int **
之间进行转换,因为它们只代表不同的内容(您将int [][]
转换为int **
会导致int [][]
中的整数数组被视为指针,这将不可避免地崩溃)。
相反,您可以将int [M][N]
转换为int (*)[N]
- 一个指向N
- 长度数组数组的指针。