C++指向常量的指针和常指针
C++指向常量的指针和常指针
指向常量的指针
通常情况下,可以通过指针去修改指针指向的内容.但是在某些情况下,只希望通过指针去访问指针指向的内容,不想修改.比如只想通过树根结点的指针去遍历输出树中所有结点的内容,不修改.这时候就可以使用指向常量的指针,防止意外修改.
看下面的代码
const int* u;
const int* u;可以读作:u是一个指针,该指针指向不能通过该指针修改的内容.重点在不能通过该指针修改的内容,也就是说u指向的内容不能通过u来修改,但是可以通过别的方法修改.看下面的代码和注释.
#include <iostream>
using namespace std;
int main() {
int a = 3;
const int* u;
u = &a; //初始化u
cout << "*u=" << *u << endl;
/* 试图通过u修改u指向的内容,直接报错.
*u = 3;
cout << "*u=" << *u << endl;
*/
/*通过另外一个变量的指针修改u指向的内容是正确的.*/
int b = 4;
u = &b;
cout << "*u=" << *u << endl;
/*通过另外一个指针修改u指向的内容也是正确的.*/
int *c = &b;
*c = 100;
cout << "*u=" << *u << endl;
}
指向常量的指针还有一种等价的定义方式, int const* u; int const* u和const int* u的意义完全相同.
常指针
看下面的代码.
#include <iostream>
using namespace std;
int main() {
int d = 1;
int* const w = &d;
return 0;
}
int* const w = &d读作:w是一个指针,这个指针是一个不能修改的(int型)指针.重点在不能修改的指针,也就是说w不可以被修改,但w指向的内容是可以修改的.看下面的代码和注释.
#include <iostream>
using namespace std;
int main() {
int d = 1;
int* const w = &d;
/* 试图修改w,直接报错.
int e =2;
w = &e;
*/
/*可以修改w指向的内容*/
*w = 6;
cout << "*w=" << *w << endl;
*w = 7;
cout << "*w=" << *w << endl;
return 0;
}
参考资料
Bruce Eckel. Thinking in C++, Volume 1, 2nd Edition.pp360-362. 2000.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义