const 与c++指针

cosnt 是c++中用于声明常量的关键字。可以用来修饰变量,指针,函数参数和函数返回值
使用const关键字能让变量的值不能被修改,或者函数的参数和返回值不能修改

防止通过指针修改数据

通过把指针声明为指向常量的指针,可以防止通过指针修改数据,这对于传递函数参数或者在函数中使用指针时非常有用,可以确保被指向的数据不会被修改

示例:

#include <iostream>
void print(const int *ptr){
    //ptr指向的值不能被修改
    // *ptr = 10;//错误,不能修改指针指向的值
    std::cout << *ptr << std::endl;
}
int main(void) {
    int x = 5;
    print(&x);
    return 0;
}

声明常量指针

什么是常量指针?

使用const 关键字将指针本身声明为常量指针,即指针的值不能被修改。这意味着指针始终指向同一个地址,不能指向其他地址

#include <iostream>
int main(void){
    int x = 5;
    int s = 6;
    int *const str = &x;
    *ptr = 10; //可以通过指针修改指针指向地址上的值
    // ptr = &6; //错误,不能修改指针的值,也就是指针变量里面存储的地址
}

常量指针指向常量

通过将指针声明为指向常量的常量指针,不能修改指针的值,也不能修改指针指向的值
这样确保指针不会指向其他地址,也不能修改所指向的值

#include <iostream>
int main(void) {
    const int x = 5;
    const int *const str = &x; //ptr是一个指向常量的常量指针
    // *ptr = 10; //错误,不能修改指针所指向的值
    // ptr = nullptr; //错误,不能修改指针的值
}

Summary

#include <iostream>
int main(void)
{
    int x = 5;
    const int *str = &x;
    //这样的指针是没办法修改指针指向的值,str是一个指向常量int的指针
    int m = 6;
    int* const st = &m; //常量指针,不能修改指针的值

}

int* const a ==> 常量指针,不能修改指针的值 这里和int const *a是等同的
const int *a ==> 指向常量的指针,不能指针修改指向的值
const int* const a ==> 指向常量的常量指针,上面两种都不行