欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > [C++]const的使用场景

[C++]const的使用场景

2025/2/5 13:19:10 来源:https://blog.csdn.net/qq_74776071/article/details/145440295  浏览:    关键词:[C++]const的使用场景

一.使用场景

const修饰指针有三种情况:

1.const修饰指针 -- 常量指针

2.const修饰常量 -- 指针常量

3.const即修饰指针,又修饰常量

总结:我的理解:const就是让这个单元格的内容不可以被修改,const右边的那格变量的值不可以被修改。比如:const int *p = &stiA;(这里理解为,p是一个指向int的指针,在别的地方可以写为int* p,更加强调一个整体类型)就是说,这个指针p指向的int值是不可以被修改的)。但是对于 int * const p = &sti2A;来说,p这个指针存的内容是不可以改变的,也就是p指针的指向是不可以修改的。

二.具体情况

2.1const修饰指针--常量指针

const& int *p = &a;

这种情况,指针的指向可以修改,但是指向的值不可以修改。

2.2const修饰常量--指针常量

2.3既修饰常量又修饰指针

三.源代码

#include<iostream>
using namespace std;

int main() {
    //const让值不可以被修改
    cout << "const让值不可以被修改" << endl;
    const int initA = 0;
    //initA = 1;
    cout << initA << endl;
    //通过指针修改a的值
    cout << "通过指针修改a的值" << endl;
    int a = 1;
    int* ap = &a;
    cout << "a = " << a << endl;
    *ap = 10;
    cout << *ap << endl << "a = " << a << endl;

    // 使用场景1:指针修饰常量:指针的指向可以修改,但指向的值不可修改。
    cout << "使用场景1" << endl;
    int stiA = 10;
    int stiB = 10;
    int stiC = 5;

    // 正确写法:使用 const int* 声明指针
    
    const int* p = &stiA;  // 此时 *p 是常量(不能通过 p 修改值)
    //*p = 9;//通过修改p指针来修改源数据是不被允许的。 
    stiA = 9;//可以通过stiA修改值,因为这是修改了指针的指向。

    cout << *p << endl;
    // 允许修改指针的指向(指向其他地址)
    p = &stiC;  // 正确:指针的指向可以修改
    cout << *p << endl;  // 输出 5

    // 如果尝试通过 p 修改值,会报错:
    // *p = 100;  // 错误:编译器会提示 "assignment of read-only location"

    //使用场景2:const修饰常量--指针常量,指针的指向不可以修改,但是可以通过指针修改值。
    cout << "使用场景2" << endl;

    int sti2A = 10;
    int sti2B = 5;
    int sti2C = 1;
    int* const p2 = &sti2A;
    //  指针的指向是不可以修改的
    //p2 = &sti2B;
    //  但是指针的值是可以被修改的
    *p2 = 6;
    cout << *p2 << endl;
    //使用场景3:const既修饰指针又修饰常量--无法修改指针的指向也无法修改指针指向的值。
    cout << "使用场景3:const既修饰指针又修饰常量" << endl;
    int sti3A = 3;
    int sti3B = 2;
    int sti3C = 1;
    const int* const p3 = &sti3A;
    //  无法修改指针的指向
    p3 = &sti3B;
    //  无法修改指针指向的常量的值
    *p3 = 10;
    cout << *p3 << endl;
    return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com