当前位置:博客首页>>编程基础 >> 阅读正文

【C++】递增递减操作符与指针的关系

作者: 郑晓 分类: 编程基础 发布于: 2012-11-10 23:28 浏览:8,183 评论(2)


可以将递增与递减操作符用于指针和基本变量,将递增操作符用于指针时,将把指针的值增加其指向的数据类型占用的字节数,这种规则适用于对指针递增和递减。

int arr[5] = {21,32,23,45,37};

int *pt = arr; //这里的pt指向数组第一个值,即arr[0]的位置

++pt;//pt向前移动一位,指向了arr[1]的位置

也可以结合使用这些操作符和*操作符来修改指针指向的值。将*和++同时用于指针时提出了这样的问题,将什么解除引用,将什么递增。这取决于操作位置和优先级。前缀递增、前缀递减和解除引用操作符的优先级是相同的,以从右到左的方式依次进行结合。后缀递增、后缀递减的优先级是相同的,但它们比前缀操作符的优先级高,这两个操作符以从左到右的方式进行结合。

前缀操作符的从右到左结合规则意味着*++pt的含义如下:现将++应用于pt,因为++位于*的右边,然后将*应用于被递增后的pt。

另一方面,++*pt意味着先取得pt指向的值,然后将这个值加1。

在这种情况下,pt仍然指向array[2]。接着请看下面的组合:

(*pt)++;

圆括号指出,首先对指针解除引用,得到24,然后,操作符++将这个值递增到25,pt仍然指向25。最后,再看看下面的组合:

*pt++;

后缀操作符++的优先级更高,这意味着将操作符用于pt,而不是*pt,因此对指针递增。然而呢,后缀操作符意味着将对原来的地址(&array[2])而不是递增后的新地址解除引用,因此,*pt++的值应为array[2],即25,但该语句执行完毕后,pt的值将为array[3]的地址。

指针递增和递减遵循指针算术规则,因此,如果pt指向某个数组的第一个元素,++pt将修改pt,使之指向第二个元素。

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/c-pointer-ascending-descending.html

【C++】递增递减操作符与指针的关系:目前有2 条留言

用户评论头像 蔡佳博客发表于 2012年11月13日 17:56[回复]

我又来了一趟没结果还是不更新啊。

    用户评论头像 郑晓发表于 2012年11月13日 18:47[回复]

    现在不一定每天更新,可能两天更新 :mrgreen:

发表评论

change vcode