a++、++a其实都是a=a+1,也就是说a的值经过这个表达式的时候,就已经被修改了。
但a++和++a有不同之处,a++是先执行后+1,++a是先+1后执行
int a=10;
printf(a++);
printf(++a);
printf(a--);
printf(--a);
那么程序执行到,
第二行:会先输出a的值,然后再+1,也就是先执行,后+1。输出为10,然后a=a+1,a=11
第三行:首先进行+1,a=a+1=11+1=12,然后输出a的值12
像这个
int a = 10,c=0;
c = ++a + --a + a++ + a-- - a++;
printf(c);
很多初学者都以为是29(虽然我也是初学者 = =!),但其实是32,计算机会根据优先级从左到右计算,首先
1,计算++a的值,由于a的初始值是10,所以++a的值为11,a的值为11
2,计算+ --a,当前a=11,+ --a,先执行--a,a的值变更为10,然后++a + --a= 11+10=21
3, 计算+ a++ ,当前a=10,+ a++, 先执行+a,a的值依然为10,然后++a + --a + a++ =11+10+10=31
4, 计算+ a-- ,当前a=10, +a--, 先执行+a, a的值依然为10,然后 ++a + --a + a++ + a-- =11+10+10+10=41
5, 计算- a++, 当前a=10, -a++, 先执行-a,a的值依然为10,然后++a + --a + a++ + a-- - a++=11+10+10+10-10=31
最后执行 a++的+1、a--的-1、a++的+1,也就是31+1-1+1=32,a的值经过+1、-1、+1后也就变成了11
也就是++a先进行a=a+1,a++先进行+a,再进行+1