...= %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百度贴吧,必成千秋霸业,建不世之功。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com