C语言 请看一下 g=++a+a++那句 是怎么执行的 我是这么想的:根据结合性是从右到左 所以先

C语言 请看一下 g=++a+a++那句 是怎么执行的 我是这么想的:根据结合性是从右到左 所以先算a++ 这是a++=7 a=8 ++a=9 所以 g=16 这么做答案对但和解析不一样 怎么回事

编译器会尽量保证语句没有冲突,上述语句中,很显然前面的++和后面的++刚好都跟着一个a,其实就可以写成
g = (++a)+(a++);运算符++的用法就不用多说了,++在前,先加再用,++在后,先用后加,而小括号()对于运算对象只用一个变量的时候是没有作用的,因此,如果a在这条语句执行前是7的话:
先执行++a,得a = 8;
再执行g = a+a,得g = 16,
最后a++,得到a = 9.

++的核心用法就在于它是处于一个变量的前面还是后面,前面就先加再用,后面就先用在加。追问

根据结合性不是从右到左算吗

追答

不要那么死板。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-21

事实证明,对于下面那一句,它执行的是

a = a + 1;

g = a + a;

a = a + 1;

追问

意思是从左往右算咯 可C语言不是说这种优先级相同 结合性不是从右往左算吗

追答

讲原理我不会,我只管把它内部运行过程挖出来

本回答被网友采纳
第2个回答  2013-12-21
结合性从右至左就要从右至左运算?你从哪里学到的?严格说,C/C++没有规定运算顺序,而一般编译器都采用从左至右的。结合性是说在复杂的表达式中,运算符作用在哪个变量上,要细心体会才能掌握。比如a+++b,因为++是右结合的,所以被解释为a++ +b,而不会被解释为a+ ++b,等等,等等……看来你得把“结合性”、“优先级”、“运算顺序”好好体会一下,它们三者并不是一回事。追问

好像懂你的意思了 但你后面说 “++是右结合 所以被解释为a++ +b" 是不是错了 应该是a+ ++b吧

追答

你用
void main(void){
int a=5,b=3;
printf("%d\n",a+++b);
}
试一下。

第3个回答  2013-12-21
g =(++a) + a++,所以就是8+8=16
不过这样写可能会有问题,在变量值在一条语句中只可以改变一次,改变多次属于未定义行为,可能会出错。这里的a自增了两次,所以这样写不规范

C语言 请看一下 g=++a+a++那句 是怎么执行的 我是这么想的:根据结合...
再执行g = a+a,得g = 16,最后a++,得到a = 9.++的核心用法就在于它是处于一个变量的前面还是后面,前面就先加再用,后面就先用在加。

C语言++的结合性是从右到左对吗?
简单说就是,从表达式右边开始执行;只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。exp(不同优先级运算符,依据优先级高低进行运算):int a = 1, b =10, c = 30;int a = a * b + c;因为 * 比 + 的运算符优先级高,所以 先计算a * b (先计算左边,未考虑...

C语言中单目运算符,结合性从左到右,分别是什么意思??
结合性从左到右,就是运算的顺序是从左到右执行的,先运算左边的再运算右边的,如果结合性从右到左的话,就是运算顺序从右边到左边了

请问c语言自增自减的结合性是从右到左,怎么理解?如果是从右到左,为什么...
a++ 就是先返回原始值然后自加1的 ++a 先自加1再返回 这两个语句 可以在很多地方使用

c语言中==的结合性是从右到左的,指的是什么意思?是从右边的==开始算还 ...
结合性 指同一优先级的运算符 出现在同一表达式里 应当 按 从左到右的次序 还是 从右到左 的 次序 运行。== 和 != 在同一优先级,双目运算,从左往右 结合:t = (a==b!=c) ;先算 a==b, 再把它的结果 同 c 比。赋值运算符 =+=-=*= 从右到左结合。最好规规矩矩,多加...

c语言中运算符的结合方向什么时候从左至右,什么时候从右至左
右结合性:自右至左。一个运算量两侧的运算符优先级相同时,按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性和右结合性。如,算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。而最...

C语言中++、--结合性是怎样的
运行的结果如下:接下来我们解析下为什么是这个结果:1、++ : 优先级为2,结合规则:自右至左。2、|| 和 && :优先级分别在12和11,结合规则为:自左至右。3、++,--是算术运算符,而 ||, && 是逻辑运算符。4、实际上++x || ++y && ++z;是一个逻辑表达式,整个运算过程遵从的是 ||...

c语言中运算符的优先级是如何排列的?
优先级【高到低】:第一级:圆括号【()】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】。第二级:逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++ --】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*...

请教c语言等编程语言优先级的问题,对着这个优先级的表看得不是很明白...
= 结合性是”从右到左“,所以右侧的 = 先处理,a = b = c 等价于 a = (b = c);同理,a = b += c 等价于 a = (b += c),因为 + 和 += 是相同优先级的。(3) *p++ p左右的两个运算符优先级相同,但都是”从右到左“结合性,所以这样理解:*(p++)。

C语言中 移位 和 按位 和 +-*\/ 的优先级是怎么样的
其实上面的意思就是把b的绝对值赋值给a。 八、逗号运算符 在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。 假设b=2,c=7,d=5, a1=(++b,c--,d+3); a2=++b,c--,d+3; 对于第一行代码,有三个表达式,用逗号分开,所以最终的值应该是...

相似回答