c++常量指针|指针常量
大约 2 分钟
const
修饰指针
底层 const(Low-level const):常量指针
const int* p
: 这表示p
是一个指向常量整数的指针。这意味着通过指针p
可以访问整数,但不能通过p
修改所指向的整数的值。
#include <iostream>
using namespace std;
int main()
{
int x = 5;
int y = 6;
const int* p;//注意这里只是为了方便演示,建议给一个初始值,避免指针错误。
p = &x;
// 有效,可以通过指针读取 x 的值
int value = *p;
//有效,修改指针指向的值的行为被const限定,不代表变量本身被限定
x = 7;
cout << *p << endl; //注意看p地址上的值变化。
// 有效,修改指针指向的行为没有被限定。
p = &y;
// 无效,不能通过指针修改 x 的值
// *p = 10; // 这将导致编译错误
}
顶层 const(Top-level const):指针常量
int* const p
: 这表示p
是一个常量指针,即指针本身是常量,不能被重新赋值指向其他地方。但是,通过这个指针可以修改所指向的整数的值。int x = 5; int* const p = &x; // 有效,可以通过指针修改 x 的值 *p = 10; // 无效,不能修改指针 p 的值 p = nullptr; // 这将导致编译错误
1. 指针 = 地址,都在修饰指针,谁在前谁只读
常量指针:常量在前 = 指向的值只读。
指针常量:指针在前 = 指向的地址只读。
2. 根据英文直译中文
常量(const)指针(int* p
)
指针(int*
)常量(const p)
举一反三
const即修饰指针又修饰指向的值。
const int* const p;
一定牢记!只是指针的能力限定(只读)不是指向的变量
被锁定,这里和引用一定要区分开。