下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
| 运算符 | 描述 | 实例 | 
|---|---|---|
| + | 把两个操作数相加 | A + B 将得到 30 | 
| – | 从第一个操作数中减去第二个操作数 | A – B 将得到 -10 | 
| * | 把两个操作数相乘 | A * B 将得到 200 | 
| / | 分子除以分母 | B / A 将得到 2 | 
| % | 取模运算符,整除后的余数 | B % A 将得到 0 | 
| ++ | 自增运算符,整数值增加 1 | A++ 将得到 11 | 
| — | 自减运算符,整数值减少 1 | A– 将得到 9 | 
自增和自减操作符对应两条汇编指令
#include <stdio.h> 
int main()
{
    int i = 0;
    int r = 0;
    r = (i++) + (i++) + (i++);
    printf("i = %d\n", i);
    printf("r = %d\n", r);
    r = (++i) + (++i) + (++i);
    printf("i = %d\n", i);
    printf("r = %d\n", r);
    return 0;
}
gcc输出结果:

VC10.0输出结果:

++, — 操作符使用分析

因此,++ 和 — 参与混合运算结果是不确定的,在实际开发中应该避免这样使用。

自增和自减表达式阅读技巧(贪心法)
空格可以作为C语言中一个完整符号的休止符,编译器读入空格后立即对之前读入的符号进行处理。
#include <stdio.h>
int main()
{   
    int i = 0;
    //int j = ++i+++i+++i; //编译出错, 通过贪心法,编译器先读到 ++i++, 变成 1++,显然有问题
    int a = 1;
    int b = 4;
    int c = a+++b; // a+++b; 1 + 4 ====>5   a ==> 2
    int* p = &a;
    b = b / *p;
    printf("i = %d\n", i);
    //printf("j = %d\n", j);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
    return 0;
}
如果不注释第6行,则会编译报错:

注释后输出结果:

本文链接:http://so.lmcjl.com/news/23807/