C++指针的递增/递减操作

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: C++指针的递增/递减操作

将递增递减操作符用于指针时,将把指针的值增加其指向的数据类型占用的字节数,这种规则适用于对指针的递增和递减。下面来分析一段代码,整体代码如下:

#include <iostream>
using namespace std;

int main()
{
    double arr[5] = {21.1, 32.8, 23.4, 45.2, 37.4};
    double *pt = arr; // pt指向第一个数据元素,也就是arr[0],即21.1的地址
    ++pt; //指向arr[1],即32.8的地址
    cout << *pt << endl;
    cout << *++pt << endl; //先对指针进行++操作,然后+1后的指针进行取值
    cout << ++*pt << endl; //先对指针取值,然后对值+1
    cout << (*pt)++ << endl; //先对指针取值,然后对值+1
    cout << *pt++ << endl; //先对pt进行++操作,然后对pt直接取值
    cin.get();
    return 0;
}
double arr[5] = {21.1, 32.8, 23.4, 45.2, 37.4};
double *pt = arr; // pt指向第一个数据元素,也就是arr[0],即21.1的地址
++pt; //指向arr[1],即32.8的地址

将*和++/--同时用于指针时,什么时候解除引用(也就是对指针指向的地址进行取值操作),什么时候递增或者递减呢?这取决于操作符的位置和优先级。前缀递增、前缀递减喝解除引用操作符的优先级相同,以从右至左的方式进行结合。后缀递增和后缀递减的优先级相同,但比前缀操作符的优先级高,这两个操作符以从左至右的方式进行结合。

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

cout << *++pt << endl; //先对指针进行++操作,然后+1后的指针进行取值

那么同样的,++*pt意味着先获得pt指向的值,然后将这个值加1:

cout << ++*pt << endl; //先对指针取值,然后对值+1

在这种情况下,pt仍然指向arr[2].

接下来看下面这个组合:

cout << (*pt)++ << endl; //先对指针取值,然后对值+1

圆括号指出,首先对指针接触引用,得到24.4,然后操作符++将这个值递增到25.4,pt仍指向arr[2]

最后看下面的组合:

cout << *pt++ << endl; //先对pt进行++操作,然后对pt直接取值

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

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: C++指针的递增/递减操作

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: