2016-05-21 100 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; 
} 
相關問題