【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



需要注意到是,除了字符串与字符常量,符号的中间不能嵌有空白(空格、制表符、换行符等),

所以抑制贪心发的方法是,写代码的时候,可以在使用空格,这样子编译器就不会那么贪了,可以按照你想要的方式编译

猜你喜欢

转载自blog.csdn.net/zjy900507/article/details/80898064
今日推荐