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.

  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/zhouyang209117/p/5700311.html
Copyright © 2011-2022 走看看