常量指针
const int *p1 = &a;等价int const *p2 = &a;(const 在*的右边---常量指针)规则:
- 指针本身可以修改 (能修改指针的指向)
- 不能通过指针修改指向的值 (不能修改指针的数值)
记忆:
const修饰*,保护解引用后的值,不保护指针本身
int a = 10; int b = 20; //常量指针 -- 指针指向可以修改,不可修改指针的数值 // : const int* / int const * const int* p1 = &a; p1 = &b; /*p1 = 11;*/ // 编译报错,不能改变所指空间的值 int const* p2 = &a; p2 = &b;
指针常量
int *const p3 = &a; (const 在* 左边-- 为指针常量)
规则:
- 指针本身不可修改 :
p3 = &b;编译报错,指针指向一旦初始化就固定- 可以通过指针修改指向的值 :
*p3 = 11;合法,值不受const保护记忆:
const修饰指针变量p3,保护指针本身地int a = 10;
int b = 20;//指针常量 指针指向不可修改,可修改指针的数据
int* const p3 = &a;
/*p3 = &b; */ // 编译报错
*p3 = 11;
指向常量的指针常量
(双重 const)
const int *const p4 = &a;
规则:
指针指向不能改:p4 = &b; 报错
指向的数据不能改:*p4 = 111; 报错
用途:只读指针,既不能换指向,也不能修改数据
int a = 10;
int b = 20;//双重const 指向指针的常量指针
const int* const p4 = &a;
/p4 = &b;/ // 不能修改指针的指向
/p4 = 11;/ // 不能修改指针的数据
总结
- 看 const 在 * 左边:const int * / int const * → 常量指针,值不可改,指向可改
- 看 const 在 * 右边:int *const → 指针常量,指向不可改,值可改
- * 左右都有 const:双重限制,指向和值全都不能改