} 正如注释中所讲,返回值为引用,函数调用get_val(s,0)居然可以作为赋值表达式的左值,就这样,其引用的空间(s[0])中所存储的字符被赋值为‘A’,“引用是被返回元素的同义词”,此处完全等同于s[0]='A'。 程序从语法上讲没有问题,运行结果也达到了举例的目的。本例仅在于展示这种用法,理解引用作为函数返回值。
但是,b==a的计算结果不能作为左值。所以,这条语句编译是通不过的。除非写成 b == (a = 2),这个表达式的结果是 1
(a=b)括号起来代表一个结果,右边c=9后,把9这个数赋给左边,而数字不能赋值给数字(一个常量),就好像15=9?
a++是将一个变量a作为左值,这是可以的。而++(a++)是将a++的值作为右值,常量值是非法的右值,所以不可以。C++中的“++” (自增)、 “--” (自减)运算符是使用方便且效率很高的两个运算符,它们都是一元运算符。这两个运算符都有前置和后置两种使用形式。当“/”用于两整型操作数相除时...
因此,在这个表达式中,首先会执行变量a等于b的赋值操作,然后将a的值作为赋值表达式的结果,尝试将这个结果赋值给数字3,实际上这是非法的,因为数字3是一个常量,不能从程序中修改它的值。正确的写法应该是将3放在赋值号左边,例如:```a = b;3 = a; // 错误写法,应该改成 a == b ```...
至于为什么++a的结果是左值但a++不是,简单的回答是:C/C++语言本身规定如此。如果再追问为什么这样规定,可以解释如下:对一个合法的赋值语句(例如a=0),编译程序总是先求出等号右边的值,然后再求出左值的地址并立即把计算出的值赋给该地址。但对于(a++)=0,如果a++可以作为左值,则编译程序求...
a++是一个表达式,且并不是变量。a++仅存在一个临时空间用于保存表达式的运算结果,该临时空间并不能被修改,故其不能作为赋值类型运算符的左值。如(a+b)=c是不合法的表达式,因为(a+b)只有运算结果而不能被赋值,故不能作为赋值符号的左值 ...
不能,例如你上面的。++a=k,不能这样写,要a=++a 也可以,你要从1开始,你就把a的初始值设为1就可以了~! 如果表达式作为左边的值就会找不到具体的数据,如果是函数就可以直接用表达式做值,例如printf(a++,a+b-c);这样
++a的话因为返回结果和运算之后的a一样,所以++a返回的是真实的a,可以被重新赋值,所以可以作为左值。而a++返回的是运算之前的a,而此时a已经+1了,返回的数据其实是过去的a,它是另外复制出来的,而不是真正的a,所以无法被赋值,所以它只能是右值。所以a++;在执行当中的顺序是,先把a的值复制...
下列表达式中不可能作为左值(赋值运算符左侧)的是 A.a=bB.*pC.f(a,b) D.&a请帮忙给出正确答案和分析,谢谢!