编译时左值必需的错误

时间:2013-03-22 18:07:07

标签: c struct

我有一个结构

 typedef struct _scaffale {
     int NumeroScaffale;
     scaffali * succ;
     copia** pos;
 } scaffale;

其中我有一个struct copia数组。该错误来自以下代码:

copia** temp;
temp=scaff->pos;
(temp+controllo)=nuovo->copie;
确切地说,在第三行中

。问题是:为什么这一行给出了我的错误,而在下面的代码中,我使用相同的构造完全允许:

while(i<=MAXLIBRI){
    if ((temp+i)!=NULL) {
        i=i+1;
    }
    else break;
}

2 个答案:

答案 0 :(得分:3)

(temp+controllo)是右值。我的意思是它是一个计算值,而不是放置东西的位置。我猜你真正的意思是*(temp+controllo) = nuovo->copie;,而nuovo->copie会将temp+controllo分配到i标识的位置。

作为类比,如果inti = 3,您可以说(i+1) = 3,但您不能说{{1}}。我希望这显然是为什么。

答案 1 :(得分:2)

(temp+controllo)是一个计算值,并不遵循语言规则,因为它是一个合适的l-value,这是一种奇特的说法,“你不能把它放在作业的左边运算符”。