C/C++经典问答

今天百度知道里面看到了一个问题,很有意思,整理了下思路,回答如下。。。

一:

问题:假设i=0;则

1、j=(i++,i++,i++)
2、k=(i++)+(i++)+(i++)
的结果是什么?是怎么得出的

我的回答:

j=2

k=9

语法知识,逗号','是语句的分割,第一句:=的右值是一个复合语句,由三个分语句组成,第二句,=的右值只有一个执行语句

执行结果分别是

j = (2, 1, 0) 最终i = 2返回最左边的执行语句的返回值2 即得 j = 2


k = 3 + 3 + 3,最终i = 6,由于右值只是一个执行语句(i++)+(i++)+(i++)
,又是后自增,故i = 6,  k = 9(后自增符号与前自增符号的区别:后自增在单个执行语句中返回原对象的值,前自增返回自增后的值...)

注意一般C/C++语句的执行顺序都是从右至左...


需要注意两点。','是执行语句的间隔。第一行赋值符号=的右值表示由又三个执行语句组成。对象i的原值是随语句执行而不断改变的。

而第二行中,赋值符号=的右值只有一个执行语句。对象i的底值一直为i = 3不变,又自增三次,最终i = 6。


另,C/C++语言中语句的执行顺序 一般未从右至左。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章