该特定代码块的最后一行会产生错误“作为赋值左操作数所需的左值”。困惑在于为什么最后一行抛出此错误而倒数第二行却没有。

      int p2 = 0;
      spage = find(in.startpage);
      spage->noutgoing++;
      spage->outgoing = (struct webpage *)realloc((spage->outgoing),((spage->noutgoing)*sizeof(struct webpage)));

      epage = find(in.endpage);
      epage->nincoming++;
      epage->incoming = (struct webpage *)realloc((epage->incoming),((epage->nincoming)*sizeof(struct webpage)));


      position = ((epage->nincoming));

      &(epage->incoming[0]) = spage;
      &(epage->incoming[p2]) = spage;


其中spageepage是以下定义的结构:

struct webpage {
   char name;               /* name of page */
   struct webpage *outgoing;    //array of pointers pointing to outgoing webpages
   struct webpage *incoming ;   //array of pointers pointing to incoming webpages
   int noutgoing;
   int nincoming;
};


函数find返回指向struct webpage的指针。

通过将结构outgoingincoming更改为双指针并将最后一行更改为(epage->incoming[p2]) = spage;,解决了问题。

仍然不知道为什么会发生错误...

最佳答案

这段代码:

struct S {
    int * p;
};

int main() {
    struct S * s;
    int n;
    &(s->p[42]) = 0;
    &(s->p[n]) = 0;
}


用GCC 4.5.1编译,生成:

n.c:9:16: error: lvalue required as left operand of assignment
n.c:10:15: error: lvalue required as left operand of assignment


换句话说,这两种情况都会产生所需的左值错误。您可以在编译器中尝试这个确切的代码吗?

关于c - “&(epage-> incoming [0])= spage;”之间的区别和“&(epage-> incoming [p2])= spage;”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5988832/

10-10 15:00