c++常量指针和指针常量的区别
常量指针
#include <iostream>
using namespace std;
int main(){
int a = 10;
int b = 100;
// const 修饰指针称为常量指针
// 记法:const(常量)在 *(指针)之前称为 常量指针
const int* p = &a;
cout << "*p: " << *p << endl;
// 指针指向的值不可以改,指针的指向可以改
// 记法:const 后面有*,取*的操作(也就是解引用,也就是取值)就不能改
// *p = 20; // 错误,指针指向的值不可以改, 因为const直接修饰了int*
p = &b; // 正确,指针的指向可以修改
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "*p: " << *p << endl;
}
输出;
*p: 10
a: 10
b: 100
*p: 100
指针常量
#include <iostream>
using namespace std;
int main(){
int a = 10;
int b = 100;
// * 修饰const称为指针常量
// 记法:*(指针)在 const(常量)之前称为 指针常量
int* const p = &a;
cout << "*p: " << *p << endl;
// 指针的指向不可以改,指针指向的值可以改
// 记法:const 后面是指针p,直接限定指针p(指针的指向)不可更改
*p = 20; // 正确,取*的操作是解引用,也就是指针指向的值,可以改
// p = &b; // 错误,指针的指向不可以修改,因为const直接修饰了p
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "*p: " << *p << endl;
}
输出:
*p: 10
a: 20
b: 100
*p: 20
const既修饰指针又修饰常量
#include <iostream>
using namespace std;
int main(){
int a = 10;
int b = 100;
const int* const p = &a;
cout << "*p: " << *p << endl;
// *p = 20; // 错误,指针指向的值不可以修改
// p = &b; // 错误,指针的指向不可以修改
}
总结:const离谁近,谁就不能修改
常量指针: const离int* 近, 那么取*的操作就不能修改
指针常量: const离p近,那么p的值就不能修改