【问题标题】:Issue with dereferencing of pointers指针取消引用的问题
【发布时间】:2013-07-04 22:46:14
【问题描述】:

尝试为指针赋值时出现错误。

我定义了 2 个结构体:

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

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

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

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

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

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

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

谁能告诉我我做错了什么?

【问题讨论】:

    标签: c pointers struct dereference


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      你应该使用类似的东西

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

      【讨论】:

      • 我无权投票。试图投票,但它需要 15 分,但我是这个网站的新手(到目前为止只是阅读)
      【解决方案3】:

      您可以将另一个结构 A 指针分配给 array.onMe
      顺便问一下,为什么要将ptr地址分配给另一个ptr?可能是您想将 ptr 指向的地址分配给另一个指针,如下所示:

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

      【讨论】:

        猜你喜欢
        • 2011-07-09
        • 2011-07-18
        • 2021-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-25
        • 1970-01-01
        相关资源
        最近更新 更多