C语言++操作符前置、后置的区别(++操作符的副作用?)

目录

一、++操作符简介

二、前置++与后置++的区别

1.后置++:

2.前置++:

三、++操作符的副作用


前言:--操作符与++操作符属性可类比理解,懂++就懂--。

一、++操作符简介

        ++操作符是一种单目操作符,意味着其操作数只有一个,那么由于++操作符位于操作数的位置不同,分为前置++(例:++a)和后置++(例:a++)。++操作符有自增属性,++后会使得自身数值改变,数值+1

二、前置++与后置++的区别

        前置++与后置++在形式上的区别上文已经提到,那么此小节重点讲解逻辑功能上的区别。简单说来就是一句口诀:前置先+1后使用,后置先使用后+1

现在,我们来对前置++与后置++进行逻辑拆解:

1.后置++:

由于是后置++,那么就先将a的值赋给b,在结束此赋值后a再自增1,逻辑上如下图:

2.前置++:

由于是前置++,那么就先将a的值自增1,在结束此自增后将a值赋给b,逻辑上如下图:

三、++操作符的副作用

       辛苦看博客到这里,想必大家已经能分清楚前置++与后置++在形式上和逻辑上的区别了,但是还有一个副作用,这盲点其实指的就是其自增的属性,++操作符的使用会改变原来变量的值,而且每次++特别是后置++,在一些语句中若使用不当(如指针++可能就会造成越界访问)会带来不可预估的效果,这对于程序员来说是危险的。

这里我以模拟实现strncat函数为例:

对于strcat函数不明白的读者请详见strncat - C++ Reference (cplusplus.com)

首先对于dest指针我是想要使用它并且在使用完后将其作为参数返回的,但是由于++的自增属性下,程序执行完它就不再是曾经那个指针了,它所存放的地址已经改变,所以我用ptr指针来代替它完成功能,这样dest指针就保持不变了。

其次是while语句中每次对ptr语句进行解引用,判断,再++,当ptr指向‘ \0’时不再继续循环但还会进行最后一次++,那么此时ptr还是指向‘\0’吗?不是了!这就并非原本的想法,ptr变为野指针了,所以我在while语句后对其进行--,这样ptr才重新指向‘\0’。

所以这样写代码(不加上ptr--),咋一看以为是个大哥这么牛,其实是个bug错错错。还不如改为:

这样一来,可读性得到提高且不容易出错,岂不是更好,装什么大哥啊?!

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值