高分。。什么叫左结合,什么叫右结合

在c++语法中,经常听到操作符左结合,还有编译原理里面也经常出现左结合?举个例子说明下,谢谢。另外 什么叫“常数是不能左值的”。。
上面那句“常数是不能左值的”。。改为“常数是不能做左值的”。。

左结合性:意思是从左向右执行运算;

右结合性:意思是从右向左执行运算。

例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。

而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。

扩展资料:

C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。

参考资料来源:百度百科-C语言运算符

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-28
左结合的意思就是优先算操作符左边的值。比如"||"这个操作符是左结合,那么表达式:f(x) || g(x)就是先求f(x)的值,如果f(x)为真那么就不用算右边的了,如果f(x)为假还需要计算右边的值。

左值指的是可以放到赋值操作符“=”左边的值。可以放到赋值操作符左边的值是要作为地址使用,所以能让编译器找到地址的值都可作为左值。
举几个例子:
int a = 10; //a可以当左值。编译器可以找到a的地址&a,把值10存储到a所在的地址里。
char const *b = NULL; //b可以当左值。道理同上,但由于const的限定,只能在这里赋值一次。
10 = a; //10不能当左值,因为编译器不知道存放10的地址是什么。常量都是如此。
d++ = 1; //a++不能当左值,因为a++只是a自增1后返回的一份拷贝,相当于常量。
int a[2]; int *p = &a; *p++ = 1; //*p++可以当左值,编译器可以找到*p++的地址就是&a[1]。
第2个回答  推荐于2017-11-24
举些浅显的吧,
->指针知道吧,他具有左结合特性,也就是说->与它左边的标识符结合成一个表达,
去指向其他。
还有>,<,>=,<=,比如a>b,左边的a和>结合,去与b比较,而不能>b结合去与a比,
口头上也是这么读得,a大于b嘛,
右结合一个意思,比如负号,正号,是相对于右边的标识符结合的,如-5;
明白?
至于常数不能左值,这是相对于赋值(c++里的=)来说的,如a=5,
=号左边是用来得到值的,a是一块可修改的存储区的标识,也就是变量,
或一些表达式,要放值,而常数是个已确定的,不能改,所以不能在左边,
明白?追问

谢谢大家!

本回答被提问者采纳
第3个回答  2011-09-28
左值就是在赋值中可以放在赋值操作符两边的值,比如:

int a = 1;
double b = 2.0

a = b;
b = a;

这里a和b都是左值,一切变量都是左值,但const量是例外。

而右值则是只可以放在赋值操作符右边的值,比如:

int a = 0;
char *b = "hello";

3 = a; // ERROR
"howdy" = b // ERROR

这里3和"howdy"都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值
相似回答