C语言简明讲解操作符++和--的使用方法
一、与--操作符的本质 和 -- 操作符对应两条汇编指令前置变量自增减1取变量值后置取变量值变量自增减1下面看一段神奇的代码12345678910111213141516171819#include stdio.hintmain(){inti 0;intr 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);return0;}在 VS2012中它的运行结果如下在 gcc 编译器中它的运行结果如下这是由于不同编译器对 和 -- 的相对哦执行次序不一样。二、与-- 操作符使用分析C 语言中只规定了 和 -- 对应指令的相对执行次序 和 -- 对应的汇编指令不一定连续运行在混合运算中 和 -- 的汇编指令可能被打断执行 和 -- 参与混合运算结果是不确定的。笔试面试中的“奇葩”题贪心法-- 表达式的阅读技巧编译器处理的每个符号应该尽可能多的包含字符编译器以从左向右的顺序一个一个尽可能多的读入字符当读入的字符不可能和已读入的字符组成合法符号为止下面看一段代码1234567891011121314151617181920212223#include stdio.hintmain(){inti 0;intj iii;inta 1;intb 4;intc ab;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);return0;}运行后编译器会报错这行代码为什么报错呢int j iii;原因就是编译器发现 i 后由于贪心会继续往下找发现 i 后编译器觉得符合语法规则继续往下找当出现 i时编译器感觉不对开始计算就变成 1这是不合法的所以编译器就会报错。空格可以作为C语言中一个完整符号的休止符编译器读入空格后立即对之前读入的符号进行处理。所以下面这么写就可以1234567891011121314151617181920212223#include stdio.hintmain(){inti 0;intj i i i;inta 1;intb 4;intc a b;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);return0;}编译结果如下三、小结 和 -- 操作符在混合运算中的行为可能不同编译器通过贪心法处理表达式中的子表达式空格可以作为C语言中一个完整符号的休止符编译器读入空格后立即对之前读入的符号进行处理