C++ const指针
const指针
基础:const是constant的缩写,意思是不变的。也就是说const修饰的变量,是不能被改变的。
指针定义 int *p,那么我们来看一下 const加入int *p有三个地方可以加,分别是const int *p,int const *p,int *const p。
1.const int *p 和 int const *p
我们可以类比 const int num=1; 和 int const num=1;,两者是等价的。所以const int *p 和 int const *p是等价的。
接下来我们看,const int *p 的类型是什么?首先他是一个常量const,然后是一个指针。因此p就是常量指针。
常量指针:指针的指向可以修改,指向的值不可以修改。常量指针,首先得是常量,就是指向的值必须为常量,但是地址可以修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include<iostream> using namespace std; // 将const关键字用于指针 int main(){ // 指针指向的数据为常量,不能修改,但可以修改指针包含的地址 int num=10; // 常量指针,指向的值必须为常量。 const int * p = & num; // p cout << "P: " << p << endl; // num 的地址 cout << "&num: " << &num << endl; // 修改指针包含的地址,常量一样,重新定义一个num2=10 int num2=10; // 修改指针包含的地址 p = & num2; // p &num &num2 可以看到常量值不变,指针包含的地址改变 cout << "P: " << p << endl; cout << "&num" << &num << endl; cout << "&num2" << &num2 << endl; return 0; } |
如图所示,指针指向可以修改,但是指针的值不可以修改。
2.int *const p,首先是一个整型指针int *,然后一个const 常量,因此是指针常量。
指针常量:指针的指向不可以修改,指针指向的内存值可以修改。可以看到先有指针int *,然后有const 常量修饰的p,因此p的值是不可以修改的(指向的内存地址)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include<iostream> using namespace std; // 将const关键字用于指针 int main(){ // 指针包含的地址是常量,不能修改,可修改指针指向的数据 int * const p = new int ; * p=10; cout << *p << endl; cout << p << endl; // 修改指针指向的数据,p存储的地址没有改变 * p =20; cout << *p << endl; cout << p << endl; return 0; } |
箭头是指针指向的内存值,不可以修改,但是指向的内存地址中的数据可以修改。
3.const int *const p;指向常量的常指针,很好理解,都不能修改,指针的指向不可以修改,指向的值也不可以修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<iostream> using namespace std; // 将const关键字用于指针 int main(){ // 指针指向的数据和地址都为常量,不能修改 int num=10; const int * const p = & num; cout << p << endl; cout << *p << endl; return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了