前言

之前C++介绍过const的使用,但是修饰指针,不同位置,作用不一样,这里简单记录一下常量指针指针常量相关内容。

记录于此,方便自己查。(好像以前也记录过。。。忘了)

正文

常量指针

const int *p

定义const 修饰的是 int,即指向的内容是常量。指针本身不是常量,可以随时换指向。

int main() {
    int a = 10;
    int b = 20;
    // 定义常量指针:指向的内容不可变,指针指向可变
    const int *p = &a;
    // 合法:指针指向可以改变
    p = &b;
    cout << "p 现在指向 b,值为: " << *p << endl; // 输出 20
    // 编译报错:不能通过常量指针修改指向的值
    // *p = 30;
    // 合法:原变量本身可以被修改(不受指针限制)
    b = 30;
    cout << "b 被直接修改为: " << *p << endl; // 输出 30
    return 0;
}

指针常量

int * const p

定义const 修饰的是 p,即指针本身是常量。指向的内容不是常量,可以通过指针修改。

int main() {
    int a = 10;
    int b = 20;
    // 定义指针常量:指针指向不可变,指向的内容可变
    // 必须初始化,否则编译报错
    int * const p = &a;
    //合法:可以通过指针常量修改指向的值
    *p = 99;
    cout << "a 被指针修改为: " << a << endl; // 输出 99
    // 编译报错:指针常量不能改变指向
    // p = &b;
    // 合法:原变量本身也可以被直接修改
    a = 100;
    cout << "a 被直接修改为: " << *p << endl; // 输出 100
    return 0;
}

双重锁定

两个const,指向的内容和指针指向都不可以改变,也就只能读取。

const int * const p

定义const 同时修饰 intp,即指针指向和内容都不可变

int main() {
    int a = 10;
    int b = 20;
    // 定义双重锁定:指针指向和内容都不可变
    const int * const p = &a;
    // 编译报错:不能改变指向
    // p = &b;
    // 编译报错:不能通过指针修改值
    // *p = 99;
    // 合法:原变量本身仍可被直接修改
    a = 100;
    cout << "a 被直接修改为: " << a << endl; // 输出 100
    return 0;
}

小结

  • const int *pconst*左边 → 锁(内容不可改)

  • int * const pconst*右边 → 锁(指向不可改)

  • const int * const p → 两边都有 const双重锁定

参考文章

  1. AI

  2. C++资料

相关文章

笔友城堡 - 可定义的个人主页

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

none
暂无评论...