C/C++(1)由i++ 和++i区别引发的思考

如有纰漏,敬请指正

i++先赋值,后递增;++i先递增,后赋值;

首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值

原链接,引用1

i++ 与 ++i 的主要区别有两个:
1、 i++ 返回原来的值,++i 返回加1后的值。
2、 i++ 不能作为左值,而++i 可以。

原链接,引用2

于是我做了一个测试
在这里插入图片描述
结果有点令我惊讶,因为我认为从左往右运算,前者应该是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++运算优先级

按照本文第四个引用链接原文所述,
”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和()的先后顺序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值