zoukankan      html  css  js  c++  java
  • 【原创】一起学C++ 之指针的--/++ ---------C++ primer plus(第6版)

    讲*和++同时用于指针时提出了这样的问题:将什么解除引用,将什么递增。

    double arr[5]={21.1, 32.8, 23.4, 45.2, 37.4 };
    double *pt=arr;       //pt指针指向arr[0] 值为 21.1
    ++pt;                  //pt指针指向arr[1] 值为 32.8     

    前缀运算符的从右到左结合规则意味着

    *++p 的含义如下:

      先将++应用于pt(因为++位于*的右边)然后将*应用于被递增后的pt--》指针递增

    double x=*++pt; //指针+1,指向arr[2] 值为23.4

    ++*pt 的含义如下:

      意味着先取得pt指向的值,然后将这个值再加一 ---》指向的值递增

    ++*pt; //指向的值+1   23.4+1=24.4

    (*pt)++ 的含义如下:

      圆括号指出,首先对指针解除引用,得到24.4.然后,运算符++将这个值递增到25.4,pt仍指向arr[2]

    (*pt)++; 

    *p++ 的含义如下:

    x=* pt++;

      后缀运算符++的优先级更高,这意味着将运算符用于pt,而不是*pt,因此对指针递增。

      然而后缀运算符意味着将对原来的地址(&arr[2])而不是递增后的新地址解除引用,因此*pt++的值为arr[2],即25.4,

      但该语句执行完毕后,pt的值将为arr[3]的地址。

    #include "stdafx.h"
    #include <iostream>
    int main()
    {
        using namespace std;
        double arr[5]={21.1, 32.8, 23.4, 45.2, 37.4};
        double *pt=arr;
        ++pt;
        int a;
        double x;
        cout<<*++pt<<endl;
        cout<<++*pt<<endl;
        cout<<(*pt)++<<endl;
        cout<<*pt++<<endl;
        x=*pt++;
        cout<<x<<endl;
        cin>>a;
    }

    注意:指针递增和递减都遵循指针的运算规则,如果pt指向某个数组的第一个元素,++pt将修改pt的值(第一个元素),并指向第二个元素地址(第二个元素值不变)

     

  • 相关阅读:
    Android 面试题(答案最全)
    Android Studio导入github下载的工程
    Android清除本地数据缓存代码
    内存缓存LruCache实现原理
    OD调试器调试Delphi程序按钮事件断点方法
    OllyDBG找到按钮的处理函数
    delphi中Record 和Packed Record的区别
    这些年,我们自己换的滤芯
    大众车机天宝187A Hack笔记
    Delphi中DLL的创建和使用
  • 原文地址:https://www.cnblogs.com/holyson/p/3964115.html
Copyright © 2011-2022 走看看