2016-05-21 67 views
0

我有下面两个为我的迷宫机器人定义的结构。警告:从不兼容的指针类型(指针和结构)分配

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我已阅读迷宫输入,然后我试图使用maze->M = mazeValue将其分配给你struct maze_t。我收到以下警告:

warning: assignment from incompatible pointer type 
    maze->M = mazeValue; 

我误解或失去了一些东西?

+0

'M'的类型是'struct mazecells **',而不是'char **'。 – BLUEPIXY

+0

你有没有读过[this](http://stackoverflow.com/questions/5491704/is-it-possible-to-cast-a-char-to-a-struct)? – tijko

+0

'mazeValue'的类型为'char **';你将它分配给'struct mazecells **'类型的变量。 – kfx

回答

1

mazeValuechar **类型(即指针的指针为char),而maze->Mstruct mazecells **类型(即指针指向struct mazecells)的。

警告声明这两个变量具有不同类型的指针,并且您将一个指派给另一个,这可能会导致意外的结果。

根据您读取值的方式,您可能需要更改mazeValue的类型。

1

也许我错过了它,但你为什么不让mazeValue a 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; 

... 
1

看看这两条线:

struct mazecells **M; 
char **mazeValue; 

正如你可以清楚地看到,这两个变量有不同的类型,正因为如此,你得到警告分配从不兼容的指针类型当您尝试分配此值时maze->M = mazeValue;

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; 
} 
相关问题