纠结了一下午,看了一大堆博客帖子论坛后,终于搞懂了const和指针这俩基友的关系,在这里记录下。

const和pointer有如下3种关系:

1) const int *p;

2)int *const p(int const *p作用相同);

3) const int *const p;

先来说下这种表达式的含义;

1)指向常量的指针

2)常量指针

3)指向常量的常量指针

image够复杂的,慢慢来解说。。。

先说第一种,指向常量的指针(pointers to constent),就是说我们可以更改指针,但是却不能更改指针所指向的那个值的数据,比如
int i=3;
int j=4;
const int *p=&i;

p=&j;//正确,可以更改指针所指向的地址
*p=4;//错误,不能更改指针所指向值的数据

第二种,常量指针(constent pointers),即我们可以更改指针所指向值的数据,但是却不可以让指针指向另外一个变量,比如
int i=3;
int j=4;
int *const p=&i;

p=&j;//不正确,p不能另外指向其它数据
*p=4;//正确,可以向p指向的变量赋值

第三种,指向常量的常量指针(constant pointers to constent),不用说,集以上两种所长,既不能更改指针所指向的那个值的数据,也不能让指针指向另外一个变量
int i=3;
int j=4;
const int *const p=&i;

p=&j;//不正确,不能让指针指向另外一个变量
*p=4;//不正确,不能像更改该指针所指向的变量的值

ps:要更改i的值怎么办呢?我晕,别搞迷糊了,直接把值赋给i就行了,变量i又不是const。。。,但是如果定义变量的时候就把变量定义成const型的时候(如const int i=3),那就没办法了。。。

总结下,其实主要是看const的位置在哪里,如果是在指针类型前就是把指针所指向的值给限制成常量,但是指针没有被限制,如果const是放在指针类型的后面就是限制指针了,我们可以更改指针所指向变量的值,但是却不能对指针本身动手,不能把另外一直变量的地址传给这个指针,so,it's so simple....image