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

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

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

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

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

这个问题展开来说会很复杂,我说个大概,你还得去研究一下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 分别进行了三次++...

if (EXP) 就是(EXP)为0时假,不为0时真 所以跟(EXP!=0)一样

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

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

这个其实和编译器有关,不同的编译器可能会有不同的处理方式, 之所以用括号分开是为了方便程序员查看代码,让代码更清晰

p为指向3个元素的一维数组的指针 p+i表示第i个包含3个元素的一维数组的首地址 *(p+i),对p+i解引用,得到p+i的内容,为一维数组p+i的首元素的首地址 *(p+i)+j,一维数组p+i的第j个元素的地址 *(*(p+i)+j),一维数组p+i的第j个元素的内容 如果p指...

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