zoukankan      html  css  js  c++  java
  • 顶层const和底层const c++

    1. 普通的指针

    int i = 10, j = 30;
    int* pi = &i;  //  pi 指向 i 的地址
    *pi = 50;    // 通过 *pi 可以改变指针指向地址的值 
    cout << *pi << " " << i << endl;    // 50 50 
    pi = &j;    // pi 指向 j 的地址
    cout << *pi << " " << j << endl;    // 30 30

    pi 是指向 int 类型的指针。在没有const的情况下,pi 指向的地址可以改变,在以上代码中 pi 先是指向 i 的地址,后又指向 j 的地址。

    通过 *pi 指针解引用,可以改变它所指向的地址的值。

    2. 底层const 

        int i = 10, j = 50;
        const int* pi = &i;
    cout << *pi << endl;
    // *pi = 9; // 错误
    i = 40;
    cout << *pi << " " << i << endl; // 40 40
    pi = &j;
        cout << *pi << " " << j << endl;    // 50 50 

    const in* pi = &i 这句话中,const 修饰的是 *pi ,也就是 pi 指向的值是常量。这时我们不可以通过操作 *pi 来改变 pi 所指向的地址内的值。

    pi 本身还是一个可以改变的指针变量,在以上代码中 pi 先是指向 i 的地址,后又指向 j 的地址。

    3.顶层const

        int i = 10, j = 50;
        int* const pi = &i;
        cout << *pi << endl;
    //    pi = &j;  // 错误
        *pi = 33;
    cout << *pi << " " << i << endl;
     

    int* const pi = &i 这句话中, const 修饰的是 pi,也就是 pi 这个指针本身是常量,它在定义时初始化为 i 的地址。后面就不能再指向别的地址了。

    但我们还可通过 *pi 来改变指针指向地址的值。

    总结,看const 修饰的是 指针指向地址的值,还是 指针本身。前者是底层const,后者是顶层const。底层const用的较多。

  • 相关阅读:
    杜教筛
    单纯形法
    回文树
    模板综合
    不明觉厉的数据结构题2
    gedit脚本
    01分数规划入门
    LCT裸题泛做
    洛谷P4586 [FJOI2015]最小覆盖双圆问题(最小圆覆盖)
    洛谷P1742 最小圆覆盖(计算几何)
  • 原文地址:https://www.cnblogs.com/min2day/p/12639812.html
Copyright © 2011-2022 走看看