在结构错误中指向取消引用(间接需要指针操作数)

时间:2016-02-24 08:15:09

标签: c

下面的代码将current2的一个节点移动到我想要停止的位置:

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很新。谢谢。

2 个答案:

答案 0 :(得分:1)

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

不正确。因为错误"间接需要指针操作数"说,你可以申请 - >指针,但你正在做(*(* current2))这是错误的构造(*current2struct s_coo类型的对象,但该结构对象上的第二个*应该做什么?)

解决方案:

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

((t_coo *)current2->next)->y的含义是

  1. 取无效指针current2->next
  2. 并将其视为指向t_coo的指针(struct s_coo上的typedef)
  3. 然后访问该已铸造指针上的y成员

答案 1 :(得分:1)

你得到的错误"间接需要指针操作数"是因为你要取消引用指针。 下一个指针的类型为void *。您需要将其转换为已知指针类型。 这应该有效,

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