该特定代码块的最后一行会产生错误“作为赋值左操作数所需的左值”。困惑在于为什么最后一行抛出此错误而倒数第二行却没有。
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;
其中
spage
,epage
是以下定义的结构: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
的指针。通过将结构
outgoing
和incoming
更改为双指针并将最后一行更改为(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/