int x = 2; int y = x++ * ++x; printf("x = %d\n",x); printf("y = %d\n",y); 求解详细过程。

 我来答
海马王子
2013-03-05 · 超过31用户采纳过TA的回答
知道答主
回答量:120
采纳率:0%
帮助的人:43.5万
展开全部
首先明白一点:
第一点:
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;
吉祥二进制
高粉答主

2013-03-05 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33922 获赞数:84610

向TA提问 私信TA
展开全部
子表达式 ++x 和 x++的顺序,属于 未定义行为, 在不同的编译器上会有不同的结果。

应该避免这类语句。 一般的避免这种未定义行为的方法就是 同一个变量,在一个表达式中不要修改两次。
观楼主英俊潇洒,风流倜傥,必当世豪杰,大侠闲暇之余,关注0x30百度贴吧,必成千秋霸业,建不世之功。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式