常量指针和指针常量
1. 常量指针
-
定义: 指针指向的内存地址中的值是常量,不能通过该指针修改指向的值,但指针本身可以指向其他地址。
-
声明:
const 数据类型 * 指针变量名;
iniint a = 10; int b = 20; const int *pa1 = &a; // pa1 是一个指向常量整数的指针 // *pa1 = 30; // 错误!不能通过 pa1 修改 a 的值 pa1 = &b; // 正确!pa1 可以指向其他地址
2. 指针常量
-
定义: 指针本身是一个常量,一旦初始化后,它所指向的地址不能改变,但可以通过该指针修改指向的内存地址处的值。
-
声明:
数据类型 * const 指针变量名;
-
例如:
iniint a = 10; int b = 20; int *const pa2 = &a; // pa2 是一个指向整数的常量指针 *pa2 = 30; // 正确!可以通过 pa2 修改 a 的值 // pa2 = &b; // 错误!pa2 不能指向其他地址
-
-
理解:
const
修饰的是pa2
,即指针本身。
3. 指向常量的指针常量
-
定义: 指针本身是常量,并且它指向的内存地址中的值也是常量,两者都不能被修改。
-
声明: `const 数据类型 * const 指const int * const pa3 = &a; // pa3 是一个指向常量整数的常量指针
ini// *pa3 = 30; // 错误!不能通过 pa3 修改 a 的值 // pa3 = &b; // 错误!pa3 不能指向其他地址
-
理解: 两个
const
各司其职,第一个const
修饰*pa3
,表示不能通过pa3
修改指向的值;第二个const
修饰pa3
,表示pa3
的指向不能修改。
🤔 记忆技巧: 从右向左读有助于理解。
const int * pa
:pa
是一个指针,指向const int
(常量整数)。int * const pa
:pa
是一个const
指针,指向int
(整数)。const int * const pa
:pa
是一个const
指针,指向const int
(常量整数)。