我在c:
中遇到了一个程序int bags[5]={20,5,20,3,20};
int main()
{
int pos=5,*next();
*next()=pos; //problem with this line(should give error :lvalue required)
printf("%d %d %d",pos,*next(),bags[0]);
return 0;
}
int *next()
{
int i;
for(i=0;i<5;i++)
if(bags[i]==20)
return (bags+i);
printf("error");
exit(0);
}
程序的输出是5 20 5,虽然我预计它需要左值。 任何人都可以说出原因???
答案 0 :(得分:2)
虽然next()
不是左值,*next()
是,但这是一个int,如果* next()(which is an int in the
bags`数组,则返回值。
换句话说,虽然您无法分配函数的返回值,但您可以指定由返回值处理的值。
答案 1 :(得分:2)
next()
不是左值,因为函数返回值不是。
*next()
是左值,因为它的值包含在某个已知的内存地址中。该地址是作为函数的返回值获得还是以其他方式获得(例如,它存储在变量中)并不重要。
答案 2 :(得分:0)
取消引用运算符*
的结果是左值。
“一元*运算符表示间接。[...]如果它指向一个对象,则结果是指定对象的左值。” C99 6.5.3.2/4