c语言设i=5,p=(++i)+(++i)+(++i)为什么等于22

c语言设i=5,p=(++i)+(++i)+(++i)为什么等于22如提,谢谢

第1个回答  2018-04-13
i++是先执行整个表达式的值,再加1;++i是先加1后再执行整个表达式的。所以K的值为9,i的值为6。如果i=3,则k=(++i)+(++i)+(++i)执行过后k的值为 18 ,i的值为6
第2个回答  2018-04-13
不对啊,我在 vs2015 里测试,结果是24啊.
所以说,以后凡是涉及到这种一大堆++ -- 的题目,你都不要在乎它的结果.因为不同编译器得出的结果根本就不一样.C标准委员会也不会硬性规定结果必须是什么 .
所以 这类题目就是垃圾.随便做做就好.本回答被提问者采纳

c语言设i=5,p=(++i)+(++i)+(++i)为什么等于22
i++是先执行整个表达式的值,再加1;++i是先加1后再执行整个表达式的。所以K的值为9,i的值为6。如果i=3,则k=(++i)+(++i)+(++i)执行过后k的值为 18 ,i的值为6

i=5,s=(++i)+(++i)+(++i)为什么等于22?
先从简单的说起吧,也就是i=5,s=(++i)+(++i);这个结果应该等于14而不是13,为什么呢?看一下下面的汇编代码(通过生成exe反汇编得到)(其中-4ebp是变量i在堆栈中地址,-8ebp是s的地址,eax是寄存器ax)movl $5, -4(%ebp) ;将i赋值为5 leal -4(%ebp), %eax;取i的地址到ax incl (...

为什么int i=5 p=(++i)+(++i)+(++i)=22?
(++i)+(++i)+(++i) 这种题根据不同的编译器会有不同的结果。一般来说,结果是不固定的,有可能是22,也有可能是23。但大多数编译器的结果会是 22。分析如下 先计算 前面的 (++i)+(++i),这里会先做两个++i,得到i的值是7,然后再相加,结果为14。然后再做 14+(++i),在第一步i是...

int i=5;p=(++i)+(++i)+(++i);printf("%d",p);为什么结果为22
加号是双目运算符,在进行计算时只能进行两个数字的运算。故在程序中首先进行的运算是(++i)+(++i),即i=i+1=6,i=i+1=7,7+7=14。然后进行运算p=14+(++i)。即i=i+1=8,14+i=22。所以结果是22,而不是先算三次i=i+1,然后p=i+i+i=24。看懂了吧。

vc中的int i=5,p,q p= (++i)+(++i)+(++i)q=(i++)+(i++)+(i++)怎么算...
解析:(1) 实际编程时,无人会这样写的。(2) 关于优先级,记不住,就加( )。~~~PS:具体结果,和编译器有关。

请各位高手指点一下 已知i=5; q=(++i)+(++i)+(++i);输出q=?
这个连接有一个和你的问题一样的问题:http:\/\/zhidao.baidu.com\/question\/122126844.html 参见yyrryyrr2的回答 对于写出(++i)+(++i)+(++i)表达式的C语言书籍作者们,我对你们已经忍无可忍了,这种书应该停止出版。

i=5 p=(++i)+(++i)+(++i)+(++i) i=?,p=?
i=9,p=30

C语言自增自减问题 为什么q的结果是22呢
这个确实不好理解,解释如下:1.首先递增操作放在前面,是用的计算后结果,比如只有一个的时候,其实值是6,这个没问题吧。2.有问题的事两个的时候,两个加在一起,按理说会觉得是13,前面的6,后面的7,但是实际上不是,这是因为加法操作符是先算完两个部分,然后根据当时的值来算的,也就是说...

p=((i++)+(i++)+(i++))?
跑去又测试了一下,GCC环境下输出为15,22,8,8,VS环境下输出为15,24,8,8,已经印证了这一用法在不同环境下的不确定性,通过分析反汇编可以分析一下gcc和vs采用的不同策略 首先看GCC所生成的汇编 00401326movl $0x5,0x20(%esp)0040132Emovl $0x5,0x24(%esp 这一部分是p=(i++)+(i...

...j=5, p, q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j)
通过分析代码的反应,得到这样的解释:对于多个++j这样形式的式子,编译器是这样执行的。理论上是先+,再引用,应该得到这样的结果:6+7+8+9+10……,但编译器不知道按什么原理,第一个数要与第二个相同才能得到结果。我是增加++j的个数发现这个规律的。知道这个规律后,只能加以应用了。没道理可...

相似回答