C++ const 与指针
写 C++代码时,有时看到类似这样的代码,会愣一下、想一想它们到底是在说什么:
复制代码
因此,做个笔记,把 const 修饰符和指针混用的情况整理一下,加深理解。
如下这个语句:
复制代码
const 限定的是 int,称为:指向常量的指针, 也称为:常量指针。即:
指针本身可变,可以指向别的地址,例如:pA = &valB;
指针指向的内容是常量,不能通过指针来修改内容,*pA = 11 是非法的。
但如上的例子,可以通过访问 val 本身来修改内容,指针就无能为力了。
所以,指向常量的指针这么使用:
复制代码
它的英文名称,感觉比常量指针这个翻译更容易理解:Pointer to const。
接下来一行代码:
复制代码
这种指针称为:指针常量,英文名称:Const Pointer。即:
指针本身是常量,必须初始化。而且初始化之后,不允许再指向别的地址;
指针指向的内容,不受 const 约束。
所以,指针常量这么使用:
复制代码
这两种指针长得这么像,如何区分呢?我个人的经验,就看 const 与*的相对位置。
如果 const 在*的左边,那么就是 Pointer to const,限定指向的内容;
如果 const 在*的右边,那么就是 Const Pointer,限定指针本身。
如果 const 在*的左边、右边都存在,那么就是 Const Pointer to const。不管是指针本身、还是指针指向的内容,都被 const 限定。
汇总成一张表格:
评论