const 指針

使用指針時要涉及兩個目標,即指針自己和指針所指的對象。關於const指針變量,可歸結爲如下三種:
  1.指向常量的指針變量;
  2.常指針變量;
  3.指向常量的常指針變量。函數

1、指向常量的指針變量:
聲明格式: const type * var_name;
    或 type const * var_name;
特色:可改值。
  將指針聲明冠以const,使指向的對象爲常量,而不是指針爲常量。注意:指向常量的指針不必定指向真正的常量,它也能夠指向變量,只是從該指針的角度來看,它所指向的對象是常量,經過該指針不能修改它指向的對象。它還能夠指向其它的對象,能夠不初始化。this

例1:spa

    int a = 0,b = 1;
    const int c = 3;
    const int* pi; //等同於 (const int*) pi;
    pi = &a;
    //*pi = 10; //錯誤:不能修改它指向的對象。
    a = 10;
    pi = &b;
    //*pi = 20; //錯誤:不能修改它指向的對象。
    b = 20;
    pi = &c;
    //*pi = 30; //錯誤:不能修改它指向的對象。
例2:
    char const* pc = "asdf";
    //pc[3] = 'a'; //錯誤:不能修改它指向的對象。
    pc = "ghik";

    char const* step[3] ={"left","right","hop"};
    step[2] = "skip";
    //step[2][1] = 'i'; //錯誤:不能修改它指向的對象。

 

2、常指針常量:
聲明格式: type* const var_name;
const (char*) pContent;
特色:可改對象。
  要把指針自己 而不是它指向的對象聲明爲常量,採用運算符 *const,必須初始化,經過該指針能夠修改它指向的對象,但它不能夠指向其餘的對象。指針

例:code

    int a = 0,b = 1;
    int* const pi = &a; //等於 int* (const pi) = &a;
    *pi = 10;
    //pi = &b; //錯誤:pi自己爲常量,不能指向其餘對象。

 

3、指向常量的常指針變量:
聲明格式: const type * const var_name;
特色: 值與對象均不能改。
  要使兩個目標都是常量,二者都要聲明爲 const 。對象

例1:blog

    int a = 0,b = 1;
    const int c = 3;
    const int* const pi = &a; //至關於: (const int*)(const pi) = &a;
    //*pi = 10; //錯誤:不能修改它的對象。
    a = 10;
    //pi = &b; //錯誤:不能指向其它對象。

 

通常的,當聲明中出現 const 描述符時,它修飾的是緊跟其後的聲明元素或者在 const 成員函數聲明中函數的 this 指針。
注意:能夠將變量的地址賦給指向常量的指針變量,不會所以有什麼害處,可是,常量的地址不能賦給無約束的指針。
例:ip

    int a = 1;
    const int c = 2;
    const int* p1 = &c;
    const int* p2 = &a;

    int* p3 = &c; //非法!
    *p3=3;
    printf("%d\n",c);//c被改變了

    int* const p4 = &c; //非法! 指針常量 p4 可以改值。
    *p4=4;
    printf("%d\n",c);//c被改變了

    const int* const p5 = &c;
相關文章
相關標籤/搜索