1

我有结构

typedef struct 
{char *cells;}
 Map;

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

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

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

4

3 回答 3

1

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

如果你想初始化单元格结构,你可以做一些简单的事情,因为nextmap.cells = array[0];将导致nextmap.cells指向数组。请注意,它不是复制内容;只是指着他们。这意味着如果您通过单元格更改值,您将修改数组中的值。

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

new现在改为nextmap有问题

编辑以更正nextmap.cells分配中的类型不匹配。

于 2013-09-27T17:59:43.763 回答
1

给定一个数组char array[][NumberOfColumns](第一个维度无关紧要,此处省略;定义数组时需要它),您可以设置指向数组第一个元素的指针:

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

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

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

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

于 2013-09-27T23:43:35.270 回答
0

首先,这new不是一个变量的好名字。

new现在改为nextmap有问题

在你的情况下,第二个cells应该是一个双指针,像这样

char ** cells;

或指向二维数组的指针,例如

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

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

于 2013-09-27T17:57:36.213 回答