C语言中左右结合性,怎么理解?
3个回答
推荐于2018-02-27 · 知道合伙人互联网行家
关注
展开全部
简单说就是,从表达式右边开始执行;
只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。
exp(不同优先级运算符,依据优先级高低进行运算):
int a = 1, b =10, c = 30;
int a = a * b + c;
因为 * 比 + 的运算符优先级高,所以
先计算a * b (先计算左边,未考虑结合性),在计算 10 + c
结果是 a = 300
exp(同优先级运算符依据结合性进行运算):
int a, b = 1, c = 8;
a = b = c;
赋值运算符其结合性即为自右向左,即 a = ( b = c), 其结果是 b = 8, a = 8;
(错误答案:自左向右进行结合的话a = 1)
只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。
exp(不同优先级运算符,依据优先级高低进行运算):
int a = 1, b =10, c = 30;
int a = a * b + c;
因为 * 比 + 的运算符优先级高,所以
先计算a * b (先计算左边,未考虑结合性),在计算 10 + c
结果是 a = 300
exp(同优先级运算符依据结合性进行运算):
int a, b = 1, c = 8;
a = b = c;
赋值运算符其结合性即为自右向左,即 a = ( b = c), 其结果是 b = 8, a = 8;
(错误答案:自左向右进行结合的话a = 1)
TableDI
2024-07-18 广告
2024-07-18 广告
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配...
点击进入详情页
本回答由TableDI提供
2015-12-13 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
意思是:从表达式右边开始执行;只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。
有些运算符的优先级是错误的。
“当按照常规方式使用时,可能引起误会的任何运算符”就是存在错误优先级的运算符。
.的优先级高于*。->操作符用于消除这个问题。
*p.f变成了*(p.f)而不是(*p).f
[]高于*,于是int *ap[]中的ap变成了元素为int指针的数组。
函数()高于*,因此,int *fp()不再是函数指针了,而是一个函数,返回int *。
逗号运算符在所有运算符中优先级最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。
逗号运算符的值是最右边操作数的值,逗号运算符结合性从左至右,因此又称为顺序求值运算符。
在表达式中如果有布尔操作、算术运算、位操作等混合计算,始终应该在适当的地方加上括号。
x = f() + g() * h();
乘法先于加法执行,但是g()和h()的调用可能以任何顺序出现。
同样,f()可能在乘法之前调用,也可能在乘法之后调用。
优先级和结合性规则告诉你哪些符号组成一个意群,大部分这样的意群内部如何进行计算的次序是未定义的。 有些操作符,如&&和||等,其操作数的计算顺序是确定的,它们使用短路原则。
C语言中记住两个优先级就够了:乘法和除法先于加法和减法,在涉及其他操作符时一律加上括号。
结合性用于在几个操作符具有相同的优先级时确定先执行哪一个。
每个操作符拥有某一级别的优先级,同时也拥有左结合性或者右结合性。所有的赋值符(包括复合赋值符)都具有右结合性(从右到左执行),因此可以使用连等的赋值形式。
唯一的三目运算符?:也是具有右结合性的。
所有优先级相同的操作符,它们的结合性也相同,这是必须如此的。在函数调用中,各个参数的计算顺序是不确定的。
有些运算符的优先级是错误的。
“当按照常规方式使用时,可能引起误会的任何运算符”就是存在错误优先级的运算符。
.的优先级高于*。->操作符用于消除这个问题。
*p.f变成了*(p.f)而不是(*p).f
[]高于*,于是int *ap[]中的ap变成了元素为int指针的数组。
函数()高于*,因此,int *fp()不再是函数指针了,而是一个函数,返回int *。
逗号运算符在所有运算符中优先级最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。
逗号运算符的值是最右边操作数的值,逗号运算符结合性从左至右,因此又称为顺序求值运算符。
在表达式中如果有布尔操作、算术运算、位操作等混合计算,始终应该在适当的地方加上括号。
x = f() + g() * h();
乘法先于加法执行,但是g()和h()的调用可能以任何顺序出现。
同样,f()可能在乘法之前调用,也可能在乘法之后调用。
优先级和结合性规则告诉你哪些符号组成一个意群,大部分这样的意群内部如何进行计算的次序是未定义的。 有些操作符,如&&和||等,其操作数的计算顺序是确定的,它们使用短路原则。
C语言中记住两个优先级就够了:乘法和除法先于加法和减法,在涉及其他操作符时一律加上括号。
结合性用于在几个操作符具有相同的优先级时确定先执行哪一个。
每个操作符拥有某一级别的优先级,同时也拥有左结合性或者右结合性。所有的赋值符(包括复合赋值符)都具有右结合性(从右到左执行),因此可以使用连等的赋值形式。
唯一的三目运算符?:也是具有右结合性的。
所有优先级相同的操作符,它们的结合性也相同,这是必须如此的。在函数调用中,各个参数的计算顺序是不确定的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多加括号就能解决。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询