Const指针
const指针顾名思义就是常量指针的意思。下面将通过一些具体例子说明const指针的几种用法。
const type *p 特性
- 防止使用p指针来修改p所指向的值,下面是最简单的错误例子;
1 #include <iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 int yes = 100;
8 const int *p = &yes;
9
10 *p = 10; //Error assign!
11
12 return 0;
13 }
用g++编译的结果是:
error: assignment of read-only location ‘* p’.
- p所指向的依旧是变量,并不是常量,因此可以通过yes本身来修改值。基于这个原因,我觉得c++primer plus中将p称为指向一个常量对象的指针是不正确的,反而像编译结果一样,将其称为只读指针更加符合中文的含义;
- 将const变量的地址赋给普通指针是非法的,简单程序例子如下;
7 const int yes = 100;
8 int *p = &yes;
用g++编译的错误为:invalid conversion from ‘const int*’ to ‘int*’ .
- 将指针指向指针的const关系将遵循以上三条规则进行递归判断是否合法。同样不能将const 常量数组的地址赋给普通指针;不能将常量作为参数传递给非常量形参的函数。
- 可以修改p的值。
type * const p 特性
- 无法修改p的值,可以修改*p的值,我将其称为常量指针;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。