递增运算符的前置与后置形式
前面将 ++ 运算符放在变量前面,这叫做前置形式。这个运算符也可以写在变量的后面,这称为后置形式。
在表达式中(注意是在表达式中),使用前置和后置形式的效果大不相同。
下面的用法:
#include <stdio.h>
int main(void)
{
int count = 0;
int total = count++ + 3;
printf("%d",total);
return 0;
}Code language: PHP (php)
等同于:
#include <stdio.h>
int main(void)
{
int count = 0;
int total = count + 3; //如果++是后置,则在这里就先进行+运算,然后再计算count++
count++;
printf("%d",total);
return 0;
}Code language: PHP (php)
如果表达式编写的是 count++,则变量 count 的值在使用之后才递增。
比如:
int count = 5;
int total = 6 + count++;
count 初始值是 5,这时候由于 ++ 是写在 count 的后面,所以就先使用了 count 的值进行加法运算,也就是先让 6 + 5,结果是 11,所以 total 的值是 11。然后才将 count 的值 +1,所以最后 count 的值变成了 6,total 的值变成了 11。
上面语句等同于:
total = 6 + count;
++count;
#include <stdio.h>
int main()
{
int count = 5;
int total = 6 + count++;
printf("count:%d\n",count);
printf("total:%d\n",total);
return 0;
}Code language: PHP (php)
再看前置形式:
#include <stdio.h>
int main(void)
{
int count = 0;
int total = ++count + 3; //++在前,则先进行count++,然后再进行count+3
printf("%d",total);
return 0;
}Code language: PHP (php)
最后结果输出了 4。最后 count 的值不管是前置还是后置,都会变为 6。
再看另外一种特殊情况:a++ + b 和 a + ++b。
例如:
#include <stdio.h>
int main()
{
int a = 10;
int b = 5;
int x = a++ + b; //++在后面,所以先让a的值+b,结果赋给x,然后再让a的值+1
printf("%d",x);//15
return 0;
}Code language: PHP (php)
但是,如果写成这样:
#include <stdio.h>
int main()
{
int a = 10;
int b = 5;
int x = a + (++b); //++在b的前面,所以先计算++b,让b的值变成6,然后再10+6
printf("%d",x);//16
return 0;
}Code language: PHP (php)
上面为了避免混淆,最好使用括号。
#include <stdio.h>
int main(void)
{
int count = 0;
int a = 3;
int total = count+++a; //(count++) + a 或者 count + (++a)
printf("%d",total);
return 0;
}Code language: PHP (php)