tghk.net
当前位置:首页>>关于C语言 p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);的资料>>

C语言 p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);

这是不好的用法,属于Unspecified Behavior operator+的两个参数参与运算时,对left operand和right operand的求值顺序,标准没有进行严格定义,所以最终结果取决于相关编译器实现,因而在不同环境下会出现不同的结果 至于你说的那个三个i相加后...

p=15是因为它是先取值再自加1的,所以是5+5+5=15,运算完之后i自加到8 q在不同编译器会出来不同的结果,VC6.0是22,VS2010是24。 对于VC6.0来说,它的运算顺序是:q=((++j)+(++j)) + (++j) ,也就是先算前两个++j,然后再算加法,所以就是7+7+8

p的值可以确定是15(因为是先使用i的值再把i+1三次),i和j也可以确定都是是8(因为都自增了三次),但是q的值受编译器的运算顺序影响,值不确定(因为你不能保证j的值在运算的式子里是什么时候自增了,里面没有一个顺序点)。 这样子的题目不应...

这个问题展开来说会很复杂,我说个大概,你还得去研究一下C标准和相关的文章。 关键词是C的求值顺序。 表达式求值顺序不同于运算结合性和优先级,q=(++j)+(++j)+(++j);这个式子没有顺序点,而++j和q=xxx这些操作都是有副作用(side-effect)的,...

一般的运算规则如下: ()里面的表达式先算, ++ 在变量前面则将变量加1然后取变量值, ++在变量后面则先取变量的值然后也要将变量加1 所以: p =(i++)+(i++)+(i++) = 5 + 6 + 7 = 18 q =(++j)+(++j)+(++j) = 6 + 7 + 8 = 21 i,j 分别进行了三次++...

使用gcc编译是i+(++j), 不知道其他编译器怎么样,不过不用纠结这种问题,在实际生产中,写成这样的程序员是会被解雇的,所以你不用担心

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

++的优先级大于+,所以i+++j相当于(i++)+j

if (EXP) 就是(EXP)为0时假,不为0时真 所以跟(EXP!=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,...

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