指向常量数据的指针和常量指针

563 阅读1分钟

指向常量数据的指针

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的值。

这就是常量指针和指向常量数据的指针的区别