Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 返回指针的函数_C - Fatal编程技术网

C 返回指针的函数

C 返回指针的函数,c,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; fo

我遇到了一个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);
}
int-bags[5]={20,5,20,3,20};
int main()
{
int pos=5,*next();
*next()=pos;//此行有问题(应给出错误:需要左值)
printf(“%d%d%d”,位置,*next(),行李[0]);
返回0;
}
int*next()
{
int i;
对于(i=0;i而
next()
不是左值,
*next()
是,这是一个int,由返回值if*next()
寻址(它是数组中的一个int)

换言之,虽然不能指定函数的返回值,但可以指定由返回值寻址的值。

虽然
next()
不是左值,
*next()
是,这是一个int,由返回值if*next()
寻址(这是
数组中的int)

换句话说,虽然不能为函数的返回值赋值,但可以为返回值寻址的值赋值。

next()
不是左值,因为函数返回值不是左值。
*next()
是左值,因为它是包含在某个已知内存地址中的值。该地址是否作为函数的返回值获取(例如,它存储在变量中)无关紧要。

next()
不是左值,因为函数返回值不是。

*next()
是一个左值,因为它是包含在某个已知内存地址中的值。该地址是否作为函数的返回值获取(例如,它存储在变量中)无关紧要。

解引用运算符
*
的结果是一个左值


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

解引用运算符的结果
*
是一个左值


“一元*运算符表示间接。[…]如果它指向一个对象,结果是一个指定该对象的左值。”C99 6.5.3.2/4不在代码板中编译()。有问题的行确实给出了一个错误。您使用了什么编译器?@ugoren从句子的每个sid EO中删除两个
*
,这是一个格式匹配问题。此代码不是合法的C代码。第4行和第5行似乎有语法错误。@ssteinberg-第4行是有效的函数声明,第5行-请参阅我以前的注释。此代码没有问题.*(int指针)=5;//普通语法不在代码板()中编译。有问题的行确实给出了一个错误。您使用了什么编译器?@ugoren从句子的每个sid EO中删除两个
*
,这是一个格式匹配问题。此代码不是合法的C代码。第4行和第5行似乎有语法错误。@ssteinberg-第4行是有效的函数声明,第5行-请参阅我以前的注释。此代码没有问题.*(int-pointer)=5;//正常语法,@ugoren-怎么可能*next()是左值???*next()是一个返回地址(常数)的函数调用,常数怎么可能是左值*next()将不是int。它将是一个指向整数值的地址。不完全是,*next()是一个由next的返回值指向的int变量。@ugoren-怎么可能*next()是一个左值???*next()是一个返回地址(常数)的函数调用…常数怎么可能是左值*next()将不是int。它将是一个指向整数值的地址。不完全是,*next()是一个int变量,由next的返回值指向。