警告:从不兼容的指针类型(指针和结构)分配

时间:2016-05-21 12:51:52

标签: c arrays pointers struct

我有两个为我的迷宫机器人定义的结构。

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;

我误解或遗漏了什么吗?

4 个答案:

答案 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;
}