如有纰漏,敬请指正
i++先赋值,后递增;++i先递增,后赋值;
首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值
i++ 与 ++i 的主要区别有两个:
1、 i++ 返回原来的值,++i 返回加1后的值。
2、 i++ 不能作为左值,而++i 可以。
于是我做了一个测试
结果有点令我惊讶,因为我认为从左往右运算,前者应该是0 0,1 1,后者0 1,1 2
经查询资料,
后缀自增/后缀自减优先度2,自左往右,
前缀自增/前缀自减优先度3,自右往左
如果这样,优先计算括号内的值,由函数返回,那么左面的i增加并不奇怪,而返回值印证了i++先赋值给函数,再递增,于是左面的i增加了
接下来我又进行了两组验证,也证明了这一点
下一组的实验则充满了争议,如果确实i++先运算,那么应当输出0 1,1 2,2 3,第二个程序应当是1 1,2 2,3 3,但实际结果意味着函数优先。查到了又一份资料,圆括号运算1级,自左向右
这里转两份资料,
C语言优先级
按照本文第四个引用链接原文所述,
”C++运算符优先级表,从上到下,从左到右,优先级依次减弱。“
++i才是后置递增,用这个再返回解释第一个实验,也就解释的通了。借此机会,也表明C/C++语言优先度方面存在区别
下面这句代码,在C和C++中的输出时一样的。
printf("%d %d\n",++i,rev(i));
因此可以说明,同优先度,按照自左向右的顺序运算。
// TO DO:
C语言中()优先于i++/++i,而C++中++i和()优先于i++,要想说明这一点,就必须证明C语言中()优先于++i,C++中++i优先于(),只需要比较计算++i和()的先后顺序。