我有两个为我的迷宫机器人定义的结构。
struct mazecells{
char type;
int reachable;
int visited;
};
typedef struct maze {
struct mazecells **M;
int startx, starty;
int numrows, numcolumns;
int initdir;
}maze_t;
void ReadMaze(maze_t *maze) {
char **mazeValue;
... remaining declaration and logic ...
内部mazevalue
我已阅读迷宫输入,然后尝试使用struct maze_t
将其分配给您maze->M = mazeValue
。我低于警告:
warning: assignment from incompatible pointer type
maze->M = mazeValue;
我误解或遗漏了什么吗?
答案 0 :(得分:1)
mazeValue
的类型为char **
(即指向char的指针),而maze->M
的类型为struct mazecells **
(即指向struct mazecells指针的指针)。
警告声明这两个变量属于不同类型的指针,并且您将一个指定给另一个,这可能会导致意外结果。
根据您阅读值的方式,您可能希望更改mazeValue
的类型。
答案 1 :(得分:1)
也许我错过了,但为什么不让mazeValue
成为mazecells
?
struct mazecells{
char type;
int reachable;
int visited;
};
typedef struct maze {
struct mazecells **M;
int startx, starty;
int numrows, numcolumns;
int initdir;
}maze_t;
void ReadMaze(maze_t *maze) {
struct mazecells **mazeValue;
...
答案 2 :(得分:1)
看看这两行:
struct mazecells **M;
char **mazeValue;
您可以清楚地看到,这两个变量有不同的类型,因此,当您和& #39;重新尝试确定此值maze->M = mazeValue;
答案 3 :(得分:0)
类型必须相互匹配。以下是一个没有警告的干净编译,希望你可以使用它。
#include <stdio.h>
struct mazecells {
char type;
int reachable;
int visited;
};
typedef struct maze {
struct mazecells **M;
int startx, starty;
int numrows, numcolumns;
int initdir;
} maze_t;
int main() {
maze_t maze1 = { .startx = 1, .starty = 1 };
struct mazecells mz = { .type = 'A', .reachable = 1, .visited = 1 };
struct mazecells * mptr = &mz;
struct mazecells ** mptr2 = &mptr;
maze1.M = mptr2;
struct mazecells * structmazecells = * maze1.M;
printf("%d", structmazecells->visited);
return 0;
}