函数返回值做左值c语言 c语言作为函数值返回

C++返回引用的函数作为左值,大神过来看看 。函数是被执行过的 , 只不过引用对象消失了 。
返回的int是一个引用,在comp()里面,这个引用指向了p1.bonus和p2.bonus 。可是p1和p2在这个comp()是局部变量 , 出了comp()函数p1和p2就不存在了 。所以返回的int所指向的数据也就不存在了 。
修改的方法:把函数参数改成引用型: int comp(person p1, person p2)
这样,comp()函数中使用的p1,p2就是main()函数中的p1和p2了 。
离开了comp(),p1,p2不会消失,comp()的返回值int指向的数据还能存在 。
函数可以做左值吗 如function(a,b)=function(a,b)+1可行吗实际上,左值L-value中的L指的是Location , 表示可寻址 。常用的左值就有变量 , 指针,引用,也就是一个拥有某一地址的表达式或标识符 。
如果function(a,b)的返回值是一个引用,就可以直接作为左值,如function(a,b)=function(a,b)+1;
如果function的返回值是一个指针,那么加上解引用*也可以作为左值,如*function(a,b)=*function(a,b)+1;
如果返回的是一个对象 , 并且为其重载了右操作数为整形的"+"操作符,那么function(a,b)=function(a,b)+1也是可以编译的,不过由于函数的返回值是一个临时对象,没有啥用处啊 。
除此之外,应该是再没有可以作为左值的情况了(不是很确定 , 但主要的情况已经都说明了) 。
C语言函数返回值都是右值吗c语言中函数返回值都是存储在临时变量里面的,而临时变量是不能作为左值的,即不能放在=左边 , 因而C语言函数返回值都是右值 。
【函数返回值做左值c语言 c语言作为函数值返回】假设函数Type fun(), 定义Type i,在c语言中语句 fun() = i; 总是错误的 。
若是c++语言 , 由于增加了引用()这种类型 , 使得函数返回值可以作为左值,例如:
int m;
int fun(int n)
{
returnn;
}
执行fun(m) = 5;实际上就是把5赋给m
C语言 什么叫做左值?右值?左值 ,就是指可以被取地址的表达式 。简单的说,可以出现在等号左边的就是左值 。比如:
另外也可以有不是变量的左值:
这里,getRef()返回的是一个全局变量的引用 , 它的值存在固定的位置,因此是一个左值 。
右值 ,则指的是没有名字的值,它们只出现表达式的计算过程中,也就是等号的右边 。例如:
getName()返回一个在函数中构造的字符串 。你可以把它的值赋给一个变量,但是它是一个临时对象,我们并不知道它的值放在哪里 。所以,getName()是一个右值 。
说清楚了什么是左值和右值,那么什么是右值引用呢?右值引用 是C++11中新引入,是一种只绑定与右值的引用 。区别与左值引用(),它用来表示 。与左值引用一样,它也可以是const或者是非const的,但是我们基本不会在实际应用中用到const的右值引用(这个大家可以思考一下为什么) 。让我们来看一些例子:
从例子中 , 我们可以看到const的左值引用可以绑定到右值,非const的左值引用不能绑定到右值,右值引用可以绑定到右值 。那么右值引用怎么帮助我们解决问题呢?让我们接着看右值引用在作为函数参数时的行为 。假如我有下面两个函数:
第一个printReference函数是用const左值引用作为参数,从前面的例子中我们知道它既可以接受左值也可以接受右值 。但是当有了第二个printReference的用右值引用的重载之后,右值将优先绑定到第二个printReference 。这点我们可以通过如下代码来验证:
输出为:
关于函数返回值做左值c语言和c语言作为函数值返回的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。