[英]Difference between char** and char*
所以我的 main 中有一个二维数组(我认为): char* map[width][height] = {MATRIX HERE};
我将它传递给 function: bool canAccessEdge (char** map, int size, int currentPosX, int currentPosY);
我通过 via: canAccessEdge (*map, 10, playerStartPosX, playerStartPosY);
我想遍历 map 数组并标记玩家已经在的位置。 但我知道我不能更改 function 中索引处的值。我知道char map [][]
将是一个数组,而char *map
是一个指针。 那么什么是char* map [][]
? 是否可以在不更改原型的情况下进行变通? 对不起,如果这些是愚蠢的问题......我不能很好地掌握指针/数组。
bool exitPossible (char** map, int size, int currentPosX, int currentPosY) {
...
*maze[currentPosX][currentPosY] = "V"; // Operand of '*' must be a pointer but has type "char"
(&maze)[currentPosX][currentPosY] = "V"; // Changes whole row and not the right position
&(maze)[currentPosX][currentPosY] = "V"; // Expression must be a modifiable lvalue (I assume it's immutable)
...
}
char[N]
可以降级为char*
。 这并不意味着char[N][M]
可以降级为char**
。 初学者总是做出这样的假设,但事实并非如此。
char*[N][M]
又是另一回事了。 那不是char
的二维数组(这似乎是您想要的)。 二维字符数组是char[N][M]
。 对于二维字符数组,正确的语法是
maze[currentPosX][currentPosY] = 'V';
注意单引号。
如果要将二维字符数组传递给 function,那么最简单的方法是使用二维字符数组声明 function
bool exitPossible(char maze[N][M], ...)
但实际情况是这里的maze
是一个指向一维数组的指针,实际上不可能在C++中有一个数组作为function参数。所以function的真实声明是
bool exitPossible(char (*maze)[M], ...)
在这里我们看到了真正的maze
,一个指向一维数组(大小为 M)的指针。 这就完成了上面的第一段。 二维数组char[N][M]
不会降级为char**
,而是降级为char (*)[M]
。 如果这看起来很复杂,那么你是对的,需要一本好书来完整解释它。
请注意,在所有这些讨论中, N
和M
都是常数。 在 C++ 中,数组大小不能可变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.