格式 | 限定对象 | 备注 |
const int *p = &a;(或写作int const *p = &a;) | *p值不能改变 | a的值可以改变 |
int *const p = &a; | p值不能改变 | a的值可以改变 |
const int *const p = &a; | *p值和p值都不能改变 | a的值可以改变 |
const int a=20; | 限定对象 | 备注 |
int *p=&a; | 错误。左边为int*型,右边为con int*型,两边不匹配 | a的值不能改变 |
const int *p = &a;(或写作int const *p = &a;) | 正确。类型匹配。*p值不能改变 | a的值不能改变 |
int *const p = &a; | 错误。左边为int *const型,右边为const int*型,两边不匹配 | a的值不能改变 |
const int *const p = &a; | 正确,多加了一个const,形成*const,使指针所指地址不得改变。*p值和p值都不能改变 | a的值不能改变 |
语法并非看起来那么变化多端。一般来说,你可以在头脑里画一条垂直线穿过指针声明中的星号(*)位置,如果const出现在线的左边,指针指向的数据为常量;如果const出现在线的右边,指针本身为常量;如果const在线的两边都出现,二者都是常量。
如:
char *p = "hello"; | 非const指针, 非const数据 |
const char *p = "hello"; | 非const指针, const数据 |
char * const p = "hello"; | const指针, 非const数据 |
const char * const p = "hello"; | const指针,const数据 |