incoming[0]) = spage;"和 "&(epage->incoming[p2]) = spage;"之间的区别-6ren"> incoming[0]) = spage;"和 "&(epage->incoming[p2]) = spage;"之间的区别-该特定代码块的最后一行产生错误“需要左值作为赋值的左操作数”。令人困惑的是为什么最后一行抛出此错误,而倒数第二行却没有。 int p2 = 0; spage = find(in-6ren">
gpt4 book ai didi

c - "&(epage->incoming[0]) = spage;"和 "&(epage->incoming[p2]) = spage;"之间的区别

转载 作者:行者123 更新时间:2023-11-30 18:05:56 24 4
gpt4 key购买 nike

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

      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返回一个指向结构网页的指针。

通过将结构 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com