三种指针声明的区别:int* const、const int*、int const*
C++中三种const指针声明的区别
先明确核心区分规则:看const和*的相对位置——
const在*右侧:指针本身是常量,不能改变指向的地址const在*左侧:指针指向的内容是常量,不能通过该指针修改内容
逐个拆解你的三个声明:
1. int *const ptr1;
这才是你说的常量指针:指针本身的地址是固定的,一旦初始化后就不能再指向其他变量,但可以通过它修改指向的变量的值。
示例代码:
int a = 10; int *const ptr1 = &a; // 必须初始化,因为指针本身是常量 *ptr1 = 20; // 合法,修改指向的内容 // ptr1 = &b; // 非法,不能改变指针的指向
2. const int* ptr2; 和 3. int const* ptr3;
这两个是完全等价的,都是指向常量的指针:指针本身可以自由指向不同的变量,但不能通过这个指针去修改指向的变量的值。
示例代码:
int a = 10, b = 20; const int* ptr2 = &a; // *ptr2 = 30; // 非法,不能通过ptr2修改a的值 ptr2 = &b; // 合法,指针可以指向另一个变量
int const* ptr3只是写法不同,语义和const int* ptr2完全一致,本质都是限定指针指向的内容不可修改。
内容的提问来源于stack exchange,提问作者Zolo_Ryan
相关产品推荐
相关产品推荐

