递增运算符的前置与后置形式

递增运算符的前置与后置形式

前面将 ++ 运算符放在变量前面,这叫做前置形式。这个运算符也可以写在变量的后面,这称为后置形式。

在表达式中(注意是在表达式中),使用前置和后置形式的效果大不相同。

下面的用法:

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注