a++,++a,谁把它说清楚??

来源:百度知道 编辑:UC知道 时间:2024/06/18 22:17:57
程序1
#include<stdio.h>
void main()
{
int a=3,x;
x=(a++)+(a++);
printf("x=%d\n",x);
printf("a=%d\n",a);
}
运行结果
x=6
a=5

其中(a++)的值都为3,故x=6.
a的值经过两次自增,值为5
没问题

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

其中(a++)的值为3,(++a)的值为4.为什么x=8??为什么?为什么?
a的值经过两次自增,值为5

程序3
#include<stdio.h>
void main()
{
int a=3,x;
x=(a++)+(a++)+(++a);
printf("x=%d\n",x);
printf("a=%d\n",a);
}
运行结果
x=10
a=6
其中两个(a++)的值都为3,(++a)的值为4,故x=10
a经过三次自增值为6
没问题

程序4
#include<stdio.h>
void main()
{
int a=3,x;
x=(a++)+(++a)+(a++);
printf("x=%d\n

整体看了一下,你是对x的值的结果有疑问,我针对程序2 6 3 4 分别说一下:

程序2
编译器是先扫描一遍表达式,:(a++)+(++a)经过扫描以后,有一个++a,a=4,注意现在a=4了,编译器然后运行的是(a)+(a)=4+4=8,然后运行那个 a++,a=5

程序6
与程序2道理一样,先扫描一下,a=4,再运行的是(a)*(a)=16

程序3
是3个()了,先扫一下前两个, a值不变,a=3,(a)+(a)=6,
再扫一遍,有个++a,a=4,运行x=6+(a)=6+4=10

程序4 (a++)+(++a)+(a++);
与程序3道理一样,先扫前两个,a=4,(a)+(a)=8
再扫一次,是a++,a值不变,运行8+(a)=12

a++是先运算,再加1
++a是先加1,再运算
区别就在这,你再理解一下程序

10分 观望好心人

赞同 keyiwenwo的说法,另外说一点,当3个()的时候因为都是 +优先级别相同,当不同时比如程序8若改成 x=(a++)-(++a)*(a++);则扫描一遍后会先计算(++a)*(a++)=16,a=4,然后在扫描一遍执行 4-16=-12