指针中的运算符的结合性
发布日期:2021-06-29 11:10:10 浏览次数:2 分类:技术文章

本文共 1135 字,大约阅读时间需要 3 分钟。

先回忆一下运算符的优先级吧

这里写图片描述

这里写图片描述

C 语言与其他高级语言相比, 一个显著的特点就是其运算符特别丰富, 共有34 种运算符。C 语言将这34 种运算符规定了不同的优先级别和结合性。优先级是用来标识运算符在表达式中的运算顺序的, 在求解表达式的值的时候, 总是先按运算符的优先次序由高到低进行操作, 可是, 当一个运算对象两侧的运算符优先级别相同时, 则按运算符的结合性来确定表达式的运算顺序。

运算符的结合性指同一优先级的运算符在表达式中操作的组织方向, 即: 当一个运算对象两侧运算符的优先级别相同时, 运算对象与运算符的结合顺序, C 语言规定了各种运算符的结合方向( 结合性) 。大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减号结合, 执行a- b 的运算, 再执行加c 的运算。

除了自左至右的结合性外, C 语言有三类运算符参与运算的结合方向是从右至左。即: 单目运算符, 条件运算符, 以及赋值运算符。

关于结合性的概念在其他高级语言中是没有的, 这是C语言的特点之一,特别是从右至左结合性容易出错, 下面通过几个具体的运算符来剖析C 语言运算符的结合性。

若a 是一个变量, 则++a 或a++和- - a 或a- - 分别称为前置加或后置加运算和前置减或后置减运算, 且++a 或a++等价于a=a+1, - - a 或a- - 等价于a=a- 1, 即都是使该变量的值增加1 或减少1。由此可知, 对一个变量实行前置或后置运算, 其运算结构是相同的, 但当它们与其他运算结合在一个表达式中时, 其运算值就不同了。

讲到这里,大家应该都明白了吧。说白了,许多操作符的优先级都是相同的。这时,操作符的结合性就开始发挥作用了。在表达式中如果有几个优先级相同的操作符,结合性就起仲裁的作用,由它决定哪个操作符先执行。先执行,可以看做是加上括号。比如,右结合(从右到左),那就是,把右边的运算用括号先括起来,再与左边的进行计算,这样自然是先执行右边的了。 比如 int a,b=1,c=2; a=b=c; 这里’=’的结合性是从右到左。 故a=b=c; 可变为a=(b=c); 即a=2。

注意;在一个运算量两侧的运算符,优先级是相同时则按照运算符的结合性所规定的结合方向处理。
例如
赋值运算符+=和-=也处于同一优先级,结合方向是自右向左,那么
7+=3-=2;运算顺序就是先算3-=2,结果为1,然后再算7+=1,结果为8;

再说一下结合性吧;不知道注意没;第二级,13, 14别的都是自右向左的结合性;

再就可以联系到指针了。

先讨论++与*的优先次序吧;
这里写图片描述

转载地址:https://blog.csdn.net/zw1996/article/details/51253336 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:输入的处理1
下一篇:swap传入指针也会交换失败

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月28日 22时38分28秒