C语言 请看一下 g=++a+a++那句 是怎么执行的 我是这么想的:根据结合性是从右到左 所以先
答案:5 悬赏:70 手机版
解决时间 2021-01-14 13:10
- 提问者网友:棒棒糖
- 2021-01-14 02:21
C语言 请看一下 g=++a+a++那句 是怎么执行的 我是这么想的:根据结合性是从右到左 所以先
最佳答案
- 五星知识达人网友:笑迎怀羞
- 2021-01-14 02:50
事实证明,对于下面那一句,它执行的是
a = a + 1;
g = a + a;
a = a + 1;
追问意思是从左往右算咯 可C语言不是说这种优先级相同 结合性不是从右往左算吗追答讲原理我不会,我只管把它内部运行过程挖出来
全部回答
- 1楼网友:孤独入客枕
- 2021-01-14 06:46
g =(++a) + a++,所以就是8+8=16
不过这样写可能会有问题,在变量值在一条语句中只可以改变一次,改变多次属于未定义行为,可能会出错。这里的a自增了两次,所以这样写不规范
不过这样写可能会有问题,在变量值在一条语句中只可以改变一次,改变多次属于未定义行为,可能会出错。这里的a自增了两次,所以这样写不规范
- 2楼网友:酒安江南
- 2021-01-14 05:22
编译器会尽量保证语句没有冲突,上述语句中,很显然前面的++和后面的++刚好都跟着一个a,其实就可以写成
g = (++a)+(a++);运算符++的用法就不用多说了,++在前,先加再用,++在后,先用后加,而小括号()对于运算对象只用一个变量的时候是没有作用的,因此,如果a在这条语句执行前是7的话:
先执行++a,得a = 8;
再执行g = a+a,得g = 16,
最后a++,得到a = 9.
++的核心用法就在于它是处于一个变量的前面还是后面,前面就先加再用,后面就先用在加。追问根据结合性不是从右到左算吗追答不要那么死板。
g = (++a)+(a++);运算符++的用法就不用多说了,++在前,先加再用,++在后,先用后加,而小括号()对于运算对象只用一个变量的时候是没有作用的,因此,如果a在这条语句执行前是7的话:
先执行++a,得a = 8;
再执行g = a+a,得g = 16,
最后a++,得到a = 9.
++的核心用法就在于它是处于一个变量的前面还是后面,前面就先加再用,后面就先用在加。追问根据结合性不是从右到左算吗追答不要那么死板。
- 3楼网友:舍身薄凉客
- 2021-01-14 03:43
结合性从右至左就要从右至左运算?你从哪里学到的?严格说,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);
}
试一下。
void main(void){
int a=5,b=3;
printf("%d\n",a+++b);
}
试一下。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯