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

#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呢

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
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-09-11
令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,不信试试。
第2个回答  2009-09-11
显然是一样的
x = (++a)*(a++)

x = (a++)*(++a)
都是先扫描,因为都含有++a,所以先把a变为4
然后做乘法 16
最后在对a++,a变为5本回答被提问者采纳
第3个回答  2009-09-11
a = 3;
x=(a++)*(++a) -- 先++a,再a*a,之后a++
下面的一样...
第4个回答  2009-09-11
ree

C语言中x=(a++)*(++a)和x=(++a)*(a++)运算后是多少?
所以结果是一样的 如果是 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

C语言自增自减问题
x=(++a)+(++a)+(++a); \/\/这种问题没有必要分析的。在不同的编译系统下,答案不一样,在VC++下,答案是24。

c语言(a++)+(a++)+(a++)和(++a)+(++a)+(++a)
因为a++是变量a先参与其他运算再加1,所以(a++)+(a++)+(a++)实际上是3+3+3=9,运算后a的值是6.++a则是先求a=a+1,然后再做其他运算,所以(++a)+(++a)+(++a)实际上是5+5+6=16,运算后a的值是6.

x=a++*a++*++的运算顺序
x=a++*a++*++(最后的*++中没有乘数,怎么运算?,++是自加运算符 当然不可以当做乘数);x=a++*a++是可以运算的,顺序是:先a*a,再把a*a赋值给x;最后a进行2次自加运算;这是因为a++是后自加,就是先使用a,再对a进行自加 希望对你有帮助~...

c语言的问题 a = (++a)+(++a)+(++a)+(++a) 计算原理
先取第一个++a和第二个++a,以进行二元运算“+”此时,经过两次++,a的值变为3 因此计算结果为a+a=6,此时不再是变量,而是值6 然后再取第三个(++a)a的值变为4 因此最终结果为6+a=10 同理 (++a)+(++a)*(++a)*(++a)第一步是处理+两边的操作数,取第一个++a,此时a变为2 之后...

C++中(++a)和(a++)有什么区别?
如果a=1,b=++a,运算完b=2,a=2 当然也可以这么理解:a++就是a=a+1,其含义就是现将后面的a赋值给前面的a然后再加1.++a就是a=1+a,其含义就是先对后面的a加1然后再赋值给前面的1.但这只是在表达式中.如果在单独的语句中二者都没有什么区别!列:int a=1,b=1;a++;++b;\/\/这里就是...

c语言 a++ 与++a有什么区别
a++是先用a的值,用过之后再将a+1,而++a是用之前先将a+1,然后再用!比如说a初始值是6,那么你让b=a++,运行之后,b=6,a=7;而b=++a,运行之后,b=7,a=7

C语言关于a++和++a的问题
int a=2 “printf("%d,%d\\n",a,++a);”为什么是3,3而不是2,3呢 printf是从后往前看参数的,++a,a=3,再执行输出。“printf("%d,%d\\n",++a,a);”为什么是3,2而不是3,3呢 同理,先看到a,则a=2,然后看到++a,a=3,输入。“printf("%d,%d\\n",a,a++);”为什么是2...

C语言b=(a++)+(++a)结果为什么为4?
b = (a++) + (++a)首先a=1; 第一个执行(a++) , 因为后面有个加法, 所以此时用于后面加法的数应该是1, 而执行了这句之后a=2, 在执行后面的(++a) ,因为前面有个加法 此时应该是先执行加1之后在执行前面的加法,所以此时a=3, 在和前面的1执行加法,在赋值给b 所以b=1+3...

*a++和*(a++)
这两个是一样的,都是取值之后再进行++运算 因为++运算符在变量之后时,会先计算表达式的值,然后再进行++ 看样子还有不少和楼主一样没有搞清楚的人,希望看了我的回答明白 (*a)++,居然还有人写出这个表达式出来,真想骂他,(*a)是一个值,根本不是一个左值,怎么进行++运算 ...

相似回答