专题二 符号的技巧---- 13.++,--操作符的分析

来源:互联网 发布:网络上拨娜娜什么意思 编辑:程序博客网 时间:2024/06/05 09:15

int i=3;

(++i)+(++i)+(++i)=?

常规思考:4+5+6=15

编译器有2种结果:

1.有括号,先运算(++i),i=6,6+6+6=18;

2.加法从左到右计算,先算前两个(++i),i=5,5+5+(++i)=10+6=16.

3.编程结果:gcc(16),g++(16),VC(16)


原因:C语言中只规定了++为自增,并没有规定计算顺序。编译器实现方式不同。

 

int x;

int i=3;

x=(++i,i++,i+10);       //x=15

,逗号表达式的运算规则:从左到右求值,将最后一个值作为表达式的值

                  

++i+++i+++i?

a+++b:  1.a++ +b   2.a+ ++b?

贪心算法,--,++表达式的阅读技巧(编译器底层实现):

编译器处理的每一个符号一个尽可能多的包含字符

编译器从左到右的顺序一个一个尽可能多的读入字符,当即将读入的字符不可能    和已读入的字符组成合法符号为止。

int j=++i+++i+++i;      //error:  value required as increment operand

贪心算法:1.++i++    类似于1++


int a=1;

int b=2;

int c=a+++b;         //c=(a++)+b=3  a=2

int* p=&a;

b=b/*p;            //error,编译器认为是注释开始

b=b/  *p;           //利用空格来使程序清晰。