...= %d\n",x); printf("y = %d\n",y); 求解详细过程。
发布网友
发布时间:2024-10-23 23:25
我来回答
共2个回答
热心网友
时间:2024-11-13 16:40
首先明白一点:
第一点:
int x = 1;
if( x++ == 1)
{
printf(" x++ 是先取x的值做逻辑是否相等( == )判断之后再进行的自加操作。");
}
x = 1;
if(++x == 2)
{
printf(" 而++x 是先进行自加操作之后再将 x 的值取出来与逻辑是否相等( == )做判断。");
}
第二点:
a = 1 + b;//取b 然后 加 1 再给a;
表达式是从最右边开始运算的。
所以:
int x = 2;
int y = x++ * ++x;
等价于:
int x, y, tmp;
x = 2;
tmp = ++x;//最右边的++x . (此处x 自加1再给 tmp,x = tmp = 3;)
y = x * tmp; //重新取x做乘法。 ( y = 9;)
x++; // 左边的x++. (先做乘法之后再自加1)
所以x = 4, y = 9;
热心网友
时间:2024-11-13 16:37
子表达式 ++x 和 x++的顺序,属于 未定义行为, 在不同的编译器上会有不同的结果。
应该避免这类语句。 一般的避免这种未定义行为的方法就是 同一个变量,在一个表达式中不要修改两次。
观楼主英俊潇洒,风流倜傥,必当世豪杰,大侠闲暇之余,关注0x30百度贴吧,必成千秋霸业,建不世之功。