指向常量数据的指针
int const *p
或者const int *p
表示p is a pointer to const in是一个指向整型常量的指针,:
const int *p = &a;
p = &a;
p = &b;
*p = 2; // Error
复制代码
常量指针
int * const p
表示p is a const pointer to int, 即p是一个指向整型的常量指针,里面的值不能修改,
int * const p = &n; // n已经进行过声明
p = &d; // Error
*p = d; // YES
复制代码
总结
对于指向常量数据的指针来说,*p
是一个常量,不能通过*p
作为左值进行修改 对于常量指针来说,p
是常量,不能通过p
作为左值修改
图例
| 1001 | 1002 | 1003 | 1004 | | ........ | ........ |. 100 .| ......... | ----------------------↑ ----------------------a int a = 100;
如果是int const *p = &a;
的话,此时*p
是个常量,值为100,但是p
是个变量,所以p可以指向别的地址,比方说1002啦,但是不能通过*p
来改变地址上的值为 ----------------------p ----------------------↓ | 1001 | 1002 | 1003 | 1004 | | 1003 |--------|- 100 -|------- | -----↑--------------↑ ↑ -----p--------------a *p
如果是int *const p = &a;
的话,此时p
是个常量,不能改变1001中的内容,也就是p只能是指向a,但是可以通过*p
来改变a的值。
这就是常量指针和指向常量数据的指针的区别