2016-02-24 45 views
0

下向上運動的代碼當前第一個節點太遠,我想停下來:指點反引用(間接需要指針操作數)

typedef struct s_coo 
{ 
    int  x; 
    int  y; 
    int  z; 
    void *next; 
}    t_coo; 

typedef struct s_env 
{ 
    void *mlx; 
    void *win; 
    t_coo **head; 
}    t_env; 

int draw_map_y(t_env *e) 
{ 
    t_coo *current; 
    t_coo *current2; 

    current = *(e->head); 
    current2 = (*(e->head))->next; 

    while (current2->y == 0) 
     current2 = current2->next; 
    return (0); 
} 

於是,我試着寫在while循環:

while ((*(*current2))->next->y == 0) 

代替:

while (current2->y == 0) 

但我得到的錯誤 「間接需要指針操作」。任何人都可以解釋我並告訴我如何以正確的方式寫出來嗎?我對C.很新穎,謝謝。

+0

while(current2-> y == 0)是好的,你還有什麼改變? – 4pie0

回答

1
while ((*(*current2))->next->y == 0) 

不正確。由於錯誤「間接需要指針操作數」說,你可以應用 - >指針,但你正在做它(*(* current2))這是錯誤的構造(*current2struct s_coo類型的對象,但該結構對象應該第二個*做?)。

解決方案:

while (((t_coo *)current2->next)->y == 0) 

什麼((t_coo *)current2->next)->y裝置是

  1. 採取void指針current2->next
  2. 並把它當作指針t_coo(這是的typedef上struct s_coo
  3. 然後訪問y該鑄造指針上的成員
+0

謝謝你們,它的工作原理:) – zakk8889

1

你得到的錯誤「間接需要指針操作數」是因爲你正在引用指針。 另外下一個指針的類型是void *。您需要將其轉換爲已知的指針類型。 這應該工作,

while(((t_coo*)(current2->next))->y == 0)