我有结构
typedef struct
{char *cells;}
Map;
并且单元格假设是指向行数组的指针(行中每个位置都是整数)。例如,我不知道如何访问 2. 行中的 3. 位置上的数字。我盯着一些数组[3][3],但我不知道如何将它们与这个结构连接起来。我试过了
Map nextmap;
nextmap.cells[0] = array[0][0];
但我只有第一个数字,这很清楚。我怎样才能到其他职位?提前致谢。编辑:重命名结构......
我有结构
typedef struct
{char *cells;}
Map;
并且单元格假设是指向行数组的指针(行中每个位置都是整数)。例如,我不知道如何访问 2. 行中的 3. 位置上的数字。我盯着一些数组[3][3],但我不知道如何将它们与这个结构连接起来。我试过了
Map nextmap;
nextmap.cells[0] = array[0][0];
但我只有第一个数字,这很清楚。我怎样才能到其他职位?提前致谢。编辑:重命名结构......
当你这样做时Map nextmap;
,你创建了一个未初始化的Map 结构。当你这样做时,nextmap.cells[0] = array[0][0];
你取消引用(即跟随)未初始化的指针,并将一个值存储在它指向的随机内存中。
如果你想初始化单元格结构,你可以做一些简单的事情,因为这nextmap.cells = array[0];
将导致nextmap.cells
指向数组。请注意,它不是复制内容;只是指着他们。这意味着如果您通过单元格更改值,您将修改数组中的值。
(此外,在 C 语言中使用 'new' 作为变量名是完全可以接受的,但您可能会混淆任何阅读您的代码的 C++ 程序员,因为 'new' 是该语言中的运算符。)
new
现在改为nextmap
有问题
编辑以更正nextmap.cells
分配中的类型不匹配。
给定一个数组char array[][NumberOfColumns]
(第一个维度无关紧要,此处省略;定义数组时需要它),您可以设置指向数组第一个元素的指针:
nextmap.cells = &array[0][0];
array[i][j]
然后,您可以使用以下两个表达式之一,通过计算其在数组中的位置来访问数组中的元素:
*(nextmap.cells + i*NumberOfColumns + j)
nextmap.cells[i*NumberOfColumns + j]
二维数组通常应该作为二维数组来处理。如果没有充分理由手动计算位置是不好的做法。如果这个学校作业没有很好的理由,那么它就是一个糟糕的作业。
首先,这new
不是一个变量的好名字。
new
现在改为nextmap
有问题
在你的情况下,第二个cells
应该是一个双指针,像这样
char ** cells;
或指向二维数组的指针,例如
char (*cells)[N][N];
其中 N 是您要使用的常数。