前言:--操作符与++操作符属性可类比理解,懂++就懂--。
一、++操作符简介
++操作符是一种单目操作符,意味着其操作数只有一个,那么由于++操作符位于操作数的位置不同,分为前置++(例:++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错错错。还不如改为:
这样一来,可读性得到提高且不容易出错,岂不是更好,装什么大哥啊?!
标签:后置,++,前置,就够,操作符,ptr,指针 From: https://blog.csdn.net/ximiemie0525/article/details/136815877