Const *ptr ptr
1. const int *ptr = NULL; <=> int const *ptr = NULL;
1) 表示指向符号常量的指针变量,指针变量本身并非const所以可以指向其他变量。
2) const 的作用可以看作是“禁止通过*ptr"来改变被ptr指向的变量的值,但被指向的变量 其本身能否改变需要看其定义。
eg: const int i = 1, int j = 2;
ptr = &i; // ok
*ptr = 27 // error
i = 2 // error i is const
ptr = &j; // ok
*ptr = 28; // error
j = 3; // ok
2. const int *ptr vs int * const ptr;
1) 要区分以上两种形式重点看const与*的相对位置:
const在*之前表示”指向符号常量的指针“
const在*之后表示”指向int类型变量的常量指针“
注意:若声明成 int * const ptr = NULL;则ptr的值不可改即不可再指向其它变量,
但可以通过*ptr修改其指向的变量(如果指向了的话)。
2)识记技巧
看const修饰的是*ptr还是ptr?
当 const 在 * 之前可以认为 const修饰的是 *ptr,此时*ptr的”值“不可变,ptr的值可变
当 const 在 * 之后可以认为 const修饰的是 ptr,此时ptr的值不可变,*ptr的值可变
const修饰谁,谁的值就不可再变。
3. const int * const ptr;
1) 表示”指向int型符号常量的常量指针“
2) const 即修饰了 *ptr 表示不可通过*ptr修改其指向变量的值
又修饰了 ptr 表示ptr中的值不可再修改即不能再指向其他变量