今天在使用自增和自减时发现了一个不容易注意到的细节
代码如下: *p = (*p )++;
我想实现我的指针p指向的值自增的操作,但是在经过测试发现,我的p指向的值并不会自增,并且一直保持着同样的值。
翻阅了一些资料后发现,这里会忽视一个很关键的问题,那就是运算的优先级问题。
增运算符在最后时自身的优先级是很低的,他会在表达式所有语句都运算完成时才会执行(两个后自增的优先级没有测试过)。
所以,刚刚我上面的语句的执行的顺序是这样的
*p = *p;
(*p)++;
出现了数据不自增的现象。
解决的办法:
*p = ++(*p ); // 使用前自增 //或者 *p = (*p) + 1;
使用前自增的方式,可以保证数据自增在赋值语句前执行完毕。