q=++j+(++j)+(++j)问题

  • 内容
  • 评论
  • 相关


void main()

{

int i = 5, j =5, p, q;

p = (i++) + (i++) + (i++);

q = (++j) + (++j) + (++j);

printf("%d, %d, %d, %d", p, q, i, j);

system("pause");

}


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


这样子的题目不应该出的,因为这个运算过程并没有C语言标准的相关规定,由具体的编译环境自行确定。



q=++j+(++j)+(++j)这个则是不确定的,因为有可能是6+6+6,可能是6+7+8,可能是8+8+8,可能是6+7+7...因为你无法确定编译器会用什么顺序来计算j的值。



vc6.0:+为双目运算符默认并且结合方向是左到右所以q = 7+7+8=22




 

 

版权声明:若无特殊注明,本文皆为《SSZL》原创,转载请保留文章出处。

本文链接:q=++j+(++j)+(++j)问题 - https://sszlbg.cn/?post=16

本文标签:

q=++j+(++j)+(++j)问题

发表评论

电子邮件地址不会被公开。 必填项已用*标注

00:00 / 00:00
随机播放
欢迎来到SSZL博客!
SSZL