这个问题我一直很纠结,大一学C语言的时候就没明白过。后来就不记得什么时候就理解了。
去年给大一的同学做C语言助教的时候,认真看了相关的内容,给同学讲并且在幻灯片上演示过,当时特别
清楚。今天突然又遇到了这个问题,觉得又有点模糊了,很是纠结,上网搜了一下相关内容,自己又写了几
行代码验证相关内容。以求记忆深刻,以后还是记不清上自己blog看看也方便。
先根据我个人的理解说一下这个指针常量与常量指针:
常量指针:中心词是指针,表示这是一个指向常量的指针,所指向的内容是不能改变的,这个指针是能改变的,
它可以指向其它的变量。定义常量指针的方式:
const int *ptr; or int const *b;
以上两种定义方式是同一个意思。
指针常量:中心词是常量,就是这个指针是个常量,是不能改变的,但是指针所指向的值是可以改变的。
定义指针常量的方式:
int* const ptr;
需要注意的是,在定义指针常量的时候,必须对指针进行初始化,以上只是为了表示一些定义方式。
常量指针可以不必初始化。
下面我将贴上我的代码:
1 #include <iostream>
2 using namespace std;
3
4 int main(int argc, char* argv[])
5 {
6 /*constant pointer */
7 const int a = 5;
8 const int *b = &a;
9 // *b = 7;
10 const int c = 7;
11 b = &c;
12 cout << *b << endl;
13
14 /* pointer constant */
15 int m = 5;
16 int *const n = &m;
17 int p = 7;
18 // n = &p;
19
20 *n = 3;
21 cout << *n << endl;
22
23 return 0;
24 }
请先看代码的6-12行,7-8行定义了一个常量a以及一个常量指针b并且指向a. 第9行是注释的,因为修改常量
指针所指向的内容是illegal的。而在11行中,改变了这个指针所指向的变量,因为这个是常量指针,指针的值是可以
改变的。所以在12行中输出的是c的值,即为7.
看14-21行,15-16行定义了变量m以及一个指针常量n,即这个指针是个常量,不能修改的。17-18行想让指针
常量指向p,这是不合法的。而在20行中改变n所指向的内容的值,这是可以的。第21行输出3.