msww.net
当前位置:首页 >> C语言高手来,int i=5,j=5,p; p=(i++)+(i++)+(i++);为什么第一个括号... >>

C语言高手来,int i=5,j=5,p; p=(i++)+(i++)+(i++);为什么第一个括号...

可以这样理解.此处引入d作为具体数值.d=i++的分解步骤为d=i;i=i++

答:因为 = 的结合方向是从右到左,i++ 是在使用 i 的值后再自加1,++j 是在 j 自加1后再使用其值.所以在 p=(i++)+(i++)+(i++); 语句中,先使用最右边 i=5 的值后再自加1,使得 i=6,接着使用中间的 i=6 即 5+6=11 后再自加1,使得 i=7,最后使

p=15q=22i=8j=8i和j容易理解,它们都三次自增1,结果都为8p这样算的p=5+5+5 ,++在变量后面,叫后++运算,就是先使用i变量的值然后再自增1q是这样算的如果是q=(++j)+(++j) 结构就是2*7=14 如果式子再加长一点算法就变了..3个就是 7+7+84个就是 7+7+8+95个就是 7+7+8+9+10 用vc6.0验证通过

后++表示先使用当前值,使用之后加1,所以第一个i++使用的是i的初值5,p=5+(i++)+(i++),使用完加1,此时i的值为6,第二个i++同样先使用i的当前值,所以p=5+6+(i++),使用完加1,i的值变为7,第三个i++还是先使用i的当前值,所以p=5+6+7,最后i进行最后一次加1.前++表示先进行加1,再使用该值,q=6+(++j)+(++j),第一个++j先对j加1变成6再使用,第二个也是如此,q=6+7+(++j),先把j加1再用,q=6+7+8.所以前++和后++区别就在于何时进行加1

怎么会呢?它们是前缀增1符,先增1再运算,先做两次++i,i就成7了;从左至右计算,把前两个式子加起来放在一个临时变量中,比如A中,它就等于14;然后再与第三个式子相加,i又要增1成为8,可是这一次不能给A增了,所以是14+8=22.不过这与你使用的编译器有关,有些编译器可能会计算出24来那是因为有些编译器先把所有的增1去做完再相加,不就是3x8=24了.所以不要用这种边缘化语法写代码.不过你的6+7+8的理解是什么样的编译器都不会做出来的,因为前缀增1是要在运算前执行,前两项中是同一个变量i,怎么做完会是一个6一个7呢?

都为7;i++,++i;为逗号表达式,计算顺序是先计算表达式1,再计算表达式2,然后整个式子的值为表达式2的值.即先i++为6,再++i为7,则b为7,i也通过两次自加为7

i=1; i+=(i++)*(++i)+i;可以拆成 i=1; i=i+(i++)*(++i)+i;先计算的是(i++)*(++i),结果为3,并且i的值改变为3,所以等价于 i=3; i=i+3+i;最后结果就是9.

java相当于p=5+6+7+8+9=35. c相当于p=5+5+5+5+5=25. 这是不同语言标准不一样啊,没办法.就照我上面的算就对了.

int main(int argc, char *argv[]) { int i; i = 5; cout cout return 0; } 搞清楚表达式的值和变量的值的区别 这里i++是一个表达式,c++中每个表达式都是有值的.i++这个表达式返回的是当前i的值.所以为5.但是i是一个变量,其实在自增操作结束后,i变量的值会自加一个.变量的值为6.可以查查c++ primer中关于变量和表达式这块

j需先定义,必须有int j;优先执行括号里.因为括号里是i++ 即先执行 J=-i 此时j=-5 然后执行i=i+1 即 i=6

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.msww.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com