这几种指针却是很容易弄混淆。下面我谈谈我的看法。欢迎指正。
指向常量的指针。
按照字面意思,这个指针应该指向常量。所以呢,他的形式应该如下:
const int a=1;
const int *ip=&a;
这里我们需要注意const的位置。他在指针指向的变量类型即int之前。这就是说,变量应该是const的。事实上却是如此。其实,对于这种指针的理解,应该起于对const变量的理解。怎么说呢?就是这种指针和一般的指针没有很大的区别,仅仅是指针指向一个const变量而已。而一般的指针就不能够。同时需要注意,这个指针的指向是可以改变的。你仅仅需要注意变量是const就够了。因此,重点在变量是const上。
const指针。
按照字面意思,指针是个常量。换而言之,就是指针在初始化过后,指向将不会发生改变。这里我们需要注意,这种指针和一般的const变量一样,必须要初始化。至于指向的变量,则是一般的变量。形式如下:
int a;
int const *ip=&a;
也许你已经发现,引用其实就是一个const指针。借助于你对引用的理解,相信你已经理解了const指针。
指向const常量的const指针。
如果上面的两种指针你都理解了,我想最后这个指针类型你应该没有什么问题了。他就是一个const指针,指向的变量类型为const常量。形式如下:
const int a=0;
const int const *ip=&a;
这种指针不仅指向的变量不能修改,指针也不能修改。其实就是,首先,这种指针是一个const指针,因此指向不能修改;其次,指向const常量,所以指向的内容也不能修改。
不知道你是否已经理解了?
指向常量的指针是不能通过提领指针来改变常量,const int a=5;
const int *p=&a; *p=6; //Error!
常指针是指指针指向的空间不能被改变 int a=4; int *const p =&a;
*p =6; //OK int b=2; p=&b; //Error!
指向常量的常指针就是把上面两项加起来,什么都不能改变