指向常量数据的指针
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的值。
这就是常量指针和指向常量数据的指针的区别