学习内容:
区分 const指针 和 指向const的指针
例如:写代码经常遇到下列写法,有什么区别
1 const int *p
2 int const *p
3 int *const p
4 int const *const p
5 const int *const p片
普通指针
- (void)test {
int a = 10;
int b = 20;
int *p = &a;
*p = 6; // 间接通过指针变量p修改变量a的值
p = &b; // 修改指针变量p的指向
}
指针加const
实例1 :
//
- (void)test1 {
int a = 10;
int b = 20;
const int *p = &a;
p = &b; // 将p指向 变量b的地址
// *p = 40;
}
报错代码
// *p = 40;
*p 不能修改 p的指向可以修改
实例2 :
- (void)test2 {
int a = 10;
int b = 20;
int const *p = &a;
p = &b; // 修改p指向 将p指向变量b的地址
// *p = 40; Read-only variable is not assignable
}
报错代码
// *p = 40;
*p不能修改 p的指向可以修改
实例3 :
- (void)test3 {
int a = 10;
int b = 20;
int *const p = &a;
*p = 40; // 修改a的值
//p = &b;
}
报错代码
//p = &b;
p的指向不能修改 *p 能修改
实例4 :
- (void)test4 {
int a = 10;
int b = 20;
int const *const p = &a;
// *p = 40;
// p = &b;
}
报错代码
// *p = 40;
// p = &b;
*p 和 p 都不允许修改
实例5 :
- (void)test5 {
int a = 10;
int b = 20;
const int *const p = &a;
// *p = 40;
// p = &b;
}
报错代码
// *p = 40;
// p = &b;
*p 和 p 都不允许修改
总结:
- 观察const 修饰右边的整体
- 如果是 *p 就不能修改通过指针p间接的修改指向的地址的值
- 如果是 p 就不能修改 p的指向