【C深入】17_++、--操作使用分析
int i = 3;
(++i) + (++i) + (++i)
表达式的值为多少?15 吗?16 吗?18 吗?对于这种情况,C语言标准并没有作出规定。有的编译器计算出来为18,因为i 经过3 次自加后变为6,然后3 个6 相加得18; 而有的编译器计算出来为16(比如Visual C++6.0,gcc,g++ ),先计算前两个i 的和,这时候i自加两次,2 个i 的和为10,然后再加上第三次自加的i 得16。其实这些没有必要辩论,用到哪个 编译器写句代码测试就行了。但不会计算出15 的结果来的。
与逗号表达式
x = (++i, i++, i+10);
逗号表达式中,i 在遇到每个逗号后,认为本计算单位已经结束,i 这时候自加。所以,本例子计算完后,i的值为5,x的值为15.。
++i+++i+++i
贪心法:
编译器处理的每个符号应该尽可能多的包含字符;
编译器以从左向右的顺序一个一个尽可能多的读入字符;
当即将读入的字符不可能和已读入的字符组成合法符号为止。
报错:lvalue required as increment operand
++i++; 报错:lvalue required as increment operand
1++; 报错:lvalue required as increment operand
a+++b:=> a++ +b
还是 =>a+ ++b
需要注意到是,除了字符串与字符常量,符号的中间不能嵌有空白(空格、制表符、换行符等),
所以抑制贪心发的方法是,写代码的时候,可以在使用空格,这样子编译器就不会那么贪了,可以按照你想要的方式编译