const int i=0; const int *p2=&i; int *const p1=&i;//为何会报错 int const *p表示p是什

const int i=0;
const int *p2=&i;
int *const p1=&i;//为何会报错

int const *p表示p是什么类型的指针?

const int *const p1=&i;
const int *p2(p1);//可以
int *const p3(p1);//不可以

const int *p2=&i; //const修饰的是*p2, 也就是p2指向的对象是个const, p2本身不是const
int *const p1=&i; // const修饰的是p1,指针本身是个const, 它指向的对象不是const, 而i 是个const,所以它不能指向i
const修饰指针的时候以"*"为分割点,*前面的const 修饰指针指向的对象,*后面的const修饰指针本身

const int *p; //const修饰*p, p指向的对象是个const, 注意 int const *p和const int *p 是一样的
int * const p; //const 修饰p, 指针p是个const, *p是可变的
const int * const p; // p和*p均为const,都不可变
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-06-28
const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。
int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
http://blog.csdn.net/skywalker_leo/article/details/48627933
相似回答