zoukankan      html  css  js  c++  java
  • 指针和Const限定符

    指针和Const限定符

    1.指向const对象的指针

      如果指针指向的是const对象,则不允许使用指针来改变其所指的const值。C++要求指向const对象的指针具有const特性

    const double *cptr;                 //cptr是一个指向double类型const对象的指针。

           此处const限定了cptr指针所指向的对象类型,而非cptr本身。即cptr本身并不是const。在定义时,不需要对它进行初始化,若需要,可使cptr指向另一个const对象,但不允许使用cptr来改变所指向对象的值       

    *cptr = 30; //error

      1)把一个const对象的地址赋给const对象的指针会导致编译时错误:

    const double Pi=3.14;
    double *ptr = Π             //error
    const double *cptr = Π      //ok

      2)不能使用void*指针保存const对象的地址,必须使用const void*类型的指针保存const对象的地址:

    const int universe = 42;
    const void *cpv = &universe;      //ok
    void *pv = &universe;             //error

      3)允许把const对象的地址赋值给指向const对象的指针

    double dval = 3;
    cptr = &dval;

       虽然dval不是const对象,但任何企图通过指针cptr修改其值的行为均会导致编译错误。指向const对象的指针一经定义,就不允许修改其所指对象(const对象和非const对象)的值。若指向const对象的指针所指的对象是非const对象,可以使用其他方法更改其值:

    dval = 3.1415926;
    *cptr = 3.1415926;        //error
    cptr = &dval;
    double *ptr = &dval;
    *ptr = 2.72;
    cout << *cptr;        //输出2.72

      故:不能保证指向const对象的指针所指对象的值一定不可以修改。

       在实际的应用中,指向const对象的指针常用作函数的形参,以确保传递给函数的实际对象在函数中不因形参的改变而被修改。

    2.const指针

      const指针:是指该指针不可改变。

    int errNumb = 0;
    int *const curErr = &errNumb;

      可从右向左将上述定义读作“curErr是指向int型对象的const指针”。这意味着不能使curErr指向其他对象,任何试图给curErr赋值的操作均会导致编译错误。

    curErr = curErr;    //error

      与任何const量一样,const指针必须在定义时初始化。

      指针本身是const的事实并没有说明是否能使用该指针修改它所指对象的值。指针所指对象的值能否修改完全取决于该对象的类型。即该指针是const并不代表就不能修改其所指对象的值。如果const指针指向const对象,那么就可以使用该指针修改所指对象的值:

    int e=9;
    int *const p=&e;
    *p=6;

    这样,e的值被修改为6。

    3.指向const对象的const指针

      还有一种指向const对象的const指针

    const double pi = 3.1415926;
    const double *const pi_ptr = &pi;

      上例中,即不能修改pi_ptr所指对象的值,也不允许修改指针的指向(即pi_ptr中存放的地址值)。可从右向左将上述定义读作“pi_ptr首先是一个const指针,指向double类型的const对象”。

  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/whl2012/p/3614730.html
Copyright © 2011-2022 走看看