繁体   English   中英

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

[英]Access two-dimensional array via pointer to first element

我有结构

typedef struct 
{char *cells;}
 Map;

和单元格应该是指向行数组的指针(行中每个位置都是整数)。 我不知道例如如何访问2.行中3.位置上的数字。 我已经盯着一些array [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 = array[0]; 这将导致nextmap.cells 指向数组。 注意,它不是在复制内容。 只是指着他们。 这意味着,如果您通过单元格更改值,则将修改数组中的值。

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

现在new更改为有问题的nextmap

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

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

现在new更改为有问题的nextmap

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

char ** cells;

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

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

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

给定一个数组char array[][NumberOfColumns] (第一个维是不相关的,在此省略;在定义数组时将需要它),可以使用以下方法设置指向数组第一个元素的指针:

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

然后,您可以使用以下两个表达式之一来计算数组中的元素array[i][j]

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM