函数返回指针

时间:2012-04-21 18:46:28

标签: c

我在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,虽然我预计它需要左值。       任何人都可以说出原因???

3 个答案:

答案 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