正文
C语言中函数能否做左值 c语言必须是可以修改的左值
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言中什么叫做左值
左值就是在赋值中可以放在赋值操作符两边的值,比如:
int
a
=
1;
double
b
=
2.0
a
=
b;
b
=
a;
这里a和b都是左值,一切变量都是左值,但const变量是例外。
*p是一个左值,和变量一样,只要在*p的右边加上赋值运算符,就可改变*p的值。
如果p是一个指向常量的指针,*p就是一个不能修改的左值,即它不能被放到赋值运算符的左边。
i和
-i
都是表达式
但一个是左值(i),一个是右值(-i)。
++,--这两种操作符要求作用于左值,所以i++合法,(-i)++不合法。
不严谨的讲,左值右值的区分在于位于等号的那一侧,左侧的是左值,通常是一个变量,右侧的是右值,可以是一个变量,或者是一个表达式。
C语言 什么叫做左值?右值?
左值 ,就是指可以被取地址的表达式。简单的说,可以出现在等号左边的就是左值。比如C语言中函数能否做左值:
另外也可以有不是变量的左值C语言中函数能否做左值:
这里,getRef()返回的是一个全局变量的引用,它的值存在固定的位置,因此是一个左值。
右值 ,则指的是没有名字的值,它们只出现表达式的计算过程中,也就是等号的右边。例如C语言中函数能否做左值:
getName()返回一个在函数中构造的字符串。你可以把它的值赋给一个变量,但是它是一个临时对象,C语言中函数能否做左值我们并不知道它的值放在哪里。所以,getName()是一个右值。
说清楚C语言中函数能否做左值了什么是左值和右值,那么什么是右值引用呢?右值引用 是C++11中新引入,是一种只绑定与右值的引用。区别与左值引用(),它用来表示。与左值引用一样,它也可以是const或者是非const的,但是我们基本不会在实际应用中用到const的右值引用(这个大家可以思考一下为什么)。让我们来看一些例子:
从例子中,我们可以看到const的左值引用可以绑定到右值,非const的左值引用不能绑定到右值,右值引用可以绑定到右值。那么右值引用怎么帮助我们解决问题呢?让我们接着看右值引用在作为函数参数时的行为。假如我有下面两个函数:
第一个printReference函数是用const左值引用作为参数,从前面的例子中我们知道它既可以接受左值也可以接受右值。但是当有了第二个printReference的用右值引用的重载之后,右值将优先绑定到第二个printReference。这点我们可以通过如下代码来验证:
输出为:
C语言,关于左值,右值的概念问题
1、例如:a[3] = 5;*p = 55;
2、非常量的变量空间可以写入,自然就是左值了
3、右值指的是常量或者比如算术运算的中间结果,只能读出,不能写入,当然就是右值了
一般而言,左值是可以作为右值的,左值的本意是只写,右值的本意是只读
C语言语法问题,左操作数必须为左值是什么意思啊?我该怎么改啊?
所谓左值是指一个能用于赋值运算左边的表达式。左值必须能够被修改,不能是常量。我们用变量作左值,还可以看到,指针和引用也可以作左值。改成b=9-c。
一般形式为:变量=表达式。它的作用是将一个表达式的值赋给一个左值。
计算赋值运算符右侧表达式的值(“=”为赋值运算符),将赋值运算符右侧表达式的值赋给左侧的变量,将赋值运算符左侧的变量的值作为表达式的值。
例如:
int a, b, c;
a=3;
b=4;
c = ( a + b )*(2*a - b) // 得出14
扩展资料:
注意
1. 多重赋值表达式不能出现在变量说明中。例如:
int i=j=0;
是非法的。
例:有变量说明
int a=2,b;
指出下面表达式运算后a和b的结果。
b+=b=++a;
答:a为3,b为6。
有时将赋值运算与比较运算结合在一起形成嵌入赋值。例如:
while ((ch=getchar())!='\n');
这条语句的含义是:等待用户按下回车键后程序向下执行。
2. x *= y+8等价于x=x*(y+8),不等价于 x = x*y+8。
同样:z = y-x等价于z = z (y-x),而不等价于z = z y -x。
参考资料:
百度百科-赋值运算符
C语言中函数能否做左值的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言必须是可以修改的左值、C语言中函数能否做左值的信息别忘了在本站进行查找喔。