0

我在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 虽然我预计它是需要的左值。谁能说出原因???

4

3 回答 3

2

虽然next()不是左值*next(),但这是一个 int,由 if *next() 的返回值寻址(which is an int in the,但这是一个 int,由 *next() bag` 数组

换句话说,虽然您不能分配给函数的返回值,但您可以分配给返回值所寻址的值。

于 2012-04-21T18:51:12.160 回答
2

next()不是左值,因为函数返回值不是。
*next()是一个左值,因为它是一个包含在某个已知内存地址中的值。这个地址是作为函数的返回值还是以其他方式获得(例如,它被存储在一个变量中),并不重要。

于 2012-04-21T18:58:55.797 回答
0

取消引用运算符的结果* 一个左值。

“一元 * 运算符表示间接。[...] 如果它指向一个对象,则结果是一个指定对象的左值。” C99 6.5.3.2/4

于 2012-04-21T19:03:30.253 回答