c语言 int i =5,j=5,p,q; p=(i++)+(i++)+(i++); q=++j+(++j)+(++j); printf("%d,%d,%d,%d\n",p,q,i,j);
2个回答
2012-12-02
展开全部
p的值可以确定是15(因为是先使用i的值再把i+1三次),i和j也可以确定都是是8(因为都自增了三次),但是q的值受编译器的运算顺序影响,值不确定(因为你不能保证j的值在运算的式子里是什么时候自增了,里面没有一个顺序点)。
这样子的题目不应该出的,因为这个运算过程并没有C语言标准的相关规定,由具体的编译环境自行确定。
这样子的题目不应该出的,因为这个运算过程并没有C语言标准的相关规定,由具体的编译环境自行确定。
更多追问追答
追问
但是觉得第一次用i=5然后第二次I=6然后第三次i=7 为什么是你说的那样能在详细点。吧每个括号分步说吗
追答
后自增,先使用i的值再自增,所以p=(i++)+(i++)+(i++)其实就是p=(i)+(i)+(i)。
至于q=++j+(++j)+(++j)这个则是不确定的,因为有可能是6+6+6,可能是6+7+8,可能是8+8+8,可能是6+7+7...因为你无法确定编译器会用什么顺序来计算j的值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询