zoukankan      html  css  js  c++  java
  • C++指向常量的指针和常指针

    C++指向常量的指针和常指针

    指向常量的指针

    通常情况下,可以通过指针去修改指针指向的内容.但是在某些情况下,只希望通过指针去访问指针指向的内容,不想修改.比如只想通过树根结点的指针去遍历输出树中所有结点的内容,不修改.这时候就可以使用指向常量的指针,防止意外修改.
    看下面的代码

    const int* u;
    

    const int* u;可以读作:u是一个指针,该指针指向不能通过该指针修改的内容.重点在不能通过该指针修改的内容,也就是说u指向的内容不能通过u来修改,但是可以通过别的方法修改.看下面的代码和注释.

    #include <iostream>
    using namespace std;
    int main() {
        int a = 3;
        const int* u;
        u = &a; //初始化u
        cout << "*u=" << *u << endl;
    
        /* 试图通过u修改u指向的内容,直接报错.
            *u = 3; 
            cout << "*u=" << *u << endl;
        */
    
        /*通过另外一个变量的指针修改u指向的内容是正确的.*/
        int b = 4;
        u = &b;
        cout << "*u=" << *u << endl;
    
        /*通过另外一个指针修改u指向的内容也是正确的.*/
        int *c = &b;
        *c = 100;
        cout << "*u=" << *u << endl;
    }
    

    指向常量的指针还有一种等价的定义方式, int const* u; int const* u和const int* u的意义完全相同.

    常指针

    看下面的代码.

    #include <iostream>
    using namespace std;
    int main() {
        int d = 1;
        int* const w = &d;
        return 0;
    }
    

    int* const w = &d读作:w是一个指针,这个指针是一个不能修改的(int型)指针.重点在不能修改的指针,也就是说w不可以被修改,但w指向的内容是可以修改的.看下面的代码和注释.

    #include <iostream>
    using namespace std;
    int main() {
        int d = 1;
        int* const w = &d;
    
        /* 试图修改w,直接报错.
        int e =2;
        w = &e;
        */
    
        /*可以修改w指向的内容*/
        *w = 6;
        cout << "*w=" << *w << endl;
        *w = 7;
        cout << "*w=" << *w << endl;
        return 0;
    }
    

    参考资料
    Bruce Eckel. Thinking in C++, Volume 1, 2nd Edition.pp360-362. 2000.

  • 相关阅读:
    window XP下 php5.5+mysql+apache2+phpmyadmin安装
    poj2478Farey Sequence
    poj2723Get Luffy Out
    niop2015day2
    P2473 [SCOI2008]奖励关
    P4284 [SHOI2014]概率充电器
    P2486 [SDOI2011]染色
    noip2015day1
    hdu 2795 Billboard
    exgcd
  • 原文地址:https://www.cnblogs.com/zhouyang209117/p/5700311.html
Copyright © 2011-2022 走看看