通过指向第一个元素的指针访问二维数组

时间:2013-09-27 17:52:50

标签: c

我得到了结构

typedef struct 
{char *cells;}
 Map;

并且单元格假设是指向行数组的指针(行中每个位置都是整数)。   我不知道如何访问例如2.在2.行中的位置。   我盯着一些数组[3] [3],但我不知道如何将它们与这个结构连接起来。   我试过了

Map nextmap;
nextmap.cells[0] = array[0][0];

但我只得到第一个号码,这很清楚。我怎样才能到达其他职位?  提前致谢。  编辑:重命名结构..    

3 个答案:

答案 0 :(得分:1)

当您执行Map nextmap;时,您创建了一个未初始化的 Map结构。当您执行nextmap.cells[0] = array[0][0];时,您取消引用(即跟随)未初始化的指针,并将值存储在它指向的随机存储器中。

如果要初始化单元格结构,可以执行与nextmap.cells = array[0];一样简单的操作,这会导致nextmap.cells 指向数组。请注意,它不是复制内容;只是指着他们。这意味着如果您通过单元格更改值,您将修改数组中的值。

(另外,在C中使用'new'作为变量名是完全可以接受的,但是你可能会混淆任何阅读代码的C ++程序员,因为'new'是该语言的运算符。)

new现已更改为问题中的nextmap

已修改以更正nextmap.cells作业中的类型不匹配。

答案 1 :(得分:0)

首先,new不是变量的好名称。

new现已更改为问题中的nextmap

其次在你的情况下cells应该是一个双指针,就像这个

char ** cells;

或指向2D数组的指针,如

char (*cells)[N][N];

其中N是您想要使用的常数。

答案 2 :(得分:0)

给定一个数组char array[][NumberOfColumns](第一个维度不相关,这里省略;在定义数组时需要它),你可以设置一个指向数组第一个元素的指针:

nextmap.cells = &array[0][0];

然后你可以通过计算它在数组中的位置来访问数组array[i][j]中的元素,使用以下两个表达式中的任何一个:

*(nextmap.cells + i*NumberOfColumns + j)
nextmap.cells[i*NumberOfColumns + j]

二维数组通常应该作为二维数组来处理。如果没有充分的理由,手动计算位置是不好的做法。如果这个学校作业没有充分的理由,那么这是一个糟糕的任务。