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

2025-05-09 06:57:58
推荐回答(2个)
回答1:

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,都不可变

回答2:

const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。
int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
http://blog.csdn.net/skywalker_leo/article/details/48627933