c语言 一个小问题 请教一下 关于 赋值 表达式 高分来求

来源:百度知道 编辑:UC知道 时间:2024/05/23 00:31:07
(a=3*5)=4*3
老潭 书上说赋值表达式可以作为左值 这样是正确的 为什么
写 成 程序 却是错误的
求高人 指点 小弟 菜鸟
我用 VC6.0

#include <stdio.h>

int main()
{
int a;
(a=3*5)=4*3;

printf("%d\n",a);
return 0;
}

上面的程序,可以正确输出的,输出12。

(a=3*5)=4*3
相当于:
a=3*5;
a=4*3;

我也来 看谁答得好:
是在c++中正确,但是在c中却出现错误。

在c++中的情况
(a=3*5)=4*3
首先 括号里的先运算
a是左值,它得到15。也就是说(a=3*4)这个东西的值是就是a的值。

把(a=3*5)看作整体 它又是(a=3*5)=4*3 的左值。 把12赋值给它,a最后的值就是12

以下是详细关于左值和右值的资料:请参考
左值和右值

\\左值和右值(说白了就是:左值就相当是形参,右值就相当是实参,形参只能是变量,实参可以是数值或变量<是变量时在向左值赋值时发生implicit转换>)

左值(left value,缩写为lvalue)是能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,并且存放是允许的。例如:
int a=3; //a是变量,所以a是左值
const int b=4; //b是常量,所以b不是左值
显然常量不是左值,因为C++规定常量的值一旦确定是不能更改的。
右值(right value,缩写为rvalue)只能出现在赋值表达式的右边。左值表达式也可以作为右值表达式。例如:
int a,b=6;
a=b; //b是变量,所以是左值,此处作为右值
a=8; //8是常量,只能作右值,不能作为左值
表达式可产生左值、右值或不产生值。例如:
int a;
(a=4)=28; //ok