指针常量和常量指针总是傻傻的记不清楚,或者好不容易记住了,结果过一段时间又混淆了二者之间的概念,接下来帮你理清这两者之间的概念。
这两个概念在C/C++中经常被混淆,但它们之间的含义截然不同,核心在于'const'修饰的是谁。
指针常量
指针常量又称为(const pointer),'const'修饰的是pointer。因此指针的指向不能改变,指针所指向内存中的值可以被修改。
int a = 10, b = 20; int * const p = &a; *p = 20; //ok,指针指向地址的值可以被修改; p = &b; //error,指针指向的地址不能改变。常量指针
常量指针又被称为(point to const),'const'修饰的是数据类型(如'int')。因此指针的指向可以改变,指针指向的值不能被修改。
int a = 10, b = 20; const int * p = &a; int const * p = &a; //二者等价 p = &b; //ok,指针指向的地址可以改变; *p = 20; //error,指针指向地址中的值不能改变。二者叠加
上面两者方式叠加,我管它们叫做“常量指针常量”(const pointer to const),结合了两者的特点。既不能改变指针的指向, 也不能改变指针指向地址中的值。
int a = 10, b = 20; const int * const p = &a; int const * const p = &a; //二者等价 *p = 20; //error,不能改变指针指向地址的值; p = &b; //error,不能改变指针的指向。总结
| 能改变指针指向(p) | 能改变值(*p) | |
| 指针常量(const pointer) | 不能 | 可以 |
| 常量指针(point to const) | 可以 | 不能 |
| 常量指针常量(const pointer to const) | 不能 | 不能 |
'const'在‘*’的左边,指针指向的地址中的值不能被修改;'const'在’*‘的右边,指针的指向不能被修改,记忆技巧:左定值,右定向。