C语言中x=(a++)*(++a)和x=(++a)*(a++)运算后是多少?

#include<stdio.h>voidmain(){inta=3,x;x=(a++)*(++a);printf("x=%d\n",x);printf("a=%d\n"... #include<stdio.h>
void main()
{
int a=3,x;
x=(a++)*(++a);
printf("x=%d\n",x);
printf("a=%d\n",a);
}
运行结果
x=16
a=5

#include<stdio.h>
void main()
{
int a=3,x;
x=(++a)*(a++);
printf("x=%d\n",x);
printf("a=%d\n",a);
}
运行结果也是
x=16
a=5
这是为什么啊?为什么不是12 和16呢
展开
 我来答
百度网友5799da2aa11
推荐于2018-04-11
知道答主
回答量:20
采纳率:0%
帮助的人:3.4万
展开全部
a++是语句结束后在后加,
++a是先加后计算再语句结束
x=(a++)*(++a);只执行了++a,得出结果x=16后,即本条语句执行完了,再执行a++,得出 a=5

所以结果是一样的
如果是
x=(a++)*(a++)
x=9,a=5 因为在本语句中a++没执行 x=9之后 才自加2次 a=5
x=(++a)*(++a)
x=25,a=5 因为本语句中先执行++a,自加2次,x=25,a=5
iJeeker
2009-09-11 · TA获得超过588个赞
知道小有建树答主
回答量:505
采纳率:0%
帮助的人:518万
展开全部
令i=3;

++i,i++;都是将i加1,但是
令x=(++i); y=(i++);
++i是返回i加1后的值,故等于4即x=4;
i++是返回i加1之前的值,故还是等于3即y=3;

楼主这时的疑问来了:
为什么不是12 和16呢?

但再这语句结束后,i都等于4;(***注意这句话***)

注意:x*y,这句话,是先对x里面的东西进行计算,对y里面的东西进行计算,谁先计算不一定,可以看成是同时的进行计算的。在这之后(注意这句话,下面用到的),在进行乘法运算!

注意:在这之后,说明那个(++i)和(i++)语句执行完毕,再看上面的括号里有***那句,明白了吗?此时x和y都等于4,所以是16不是12;

举个例子:

int i = 3, j = 3;
j++;

printf("%d, %d",(i++), j);

输出的是3和4,不信试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yangfanns
2009-09-11 · TA获得超过346个赞
知道小有建树答主
回答量:42
采纳率:0%
帮助的人:61.2万
展开全部
显然是一样的
x = (++a)*(a++)

x = (a++)*(++a)
都是先扫描,因为都含有++a,所以先把a变为4
然后做乘法 16
最后在对a++,a变为5
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tomahawkcp
2009-09-11 · TA获得超过667个赞
知道答主
回答量:126
采纳率:0%
帮助的人:116万
展开全部
a = 3;
x=(a++)*(++a) -- 先++a,再a*a,之后a++
下面的一样...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
方晓5666
2009-09-11 · 超过17用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:41.3万
展开全部
ree
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式