解除引用指针的问题

时间:2013-07-07 13:12:29

标签: c pointers struct dereference

尝试为指针赋值时出错。

我已经定义了2个结构:

typedef struct {
    struct player *next; //pointers
    struct player *prev;
} player;

typedef struct {
    player onMe; //object
} field;

稍后在代码中,我创建了一个struct“player p”的实例并尝试使用它: fields [] []是一个包含类型字段结构的数组。

fields[p.x][p.y].onMe = *(p.next);
(*p.prev).next = &p.next;

在这些情况下,我得到“错误:解除指向不完整类型的指针” 我也试过(& p.next),但结果相同。

fields[x][y].onMe.prev = (&p);

在这种情况下,我得到“警告:从不兼容的指针类型[默认启用]”

进行分配

有人能告诉我我做错了吗?

3 个答案:

答案 0 :(得分:0)

您不会在任何地方声明struct player,因此结构的定义不完整。尝试

typedef struct player_s {
    struct player_s *prev;
    struct player_s *next;
} player;

答案 1 :(得分:0)

原因是struct player是不完整的类型。您使用player声明typedef类型。但是你使用struct player作为其部分,现在或其他任何地方都没有定义。

您应该使用类似

的内容
typedef struct player {
    struct player *next; //pointers
    struct player *prev;
} player;

答案 2 :(得分:0)

可能会为 array.onMe 指定另一个struct A指针。
那么,为什么要将ptr地址分配给另一个ptr?可能是你想要指定一个ptr指向另一个指针的地址,如下所示:

(*p.prev).next = p.next