1、指针常量 ?? ??? ?int a = 10; ?? ??? ?int b = 20; ?? ??? ?int* const p = &a; ?? ??? ?*p = 30; // 正确,指针常量指向的值允许修改 ?? ??? ?*p = &b; //错误,指针常量不可以修改指针的指向 ?? ??? ?总结:指针常量的指向不允许修改,但是可以修改指针的值,因为此处指针变量通过const修饰,代表为常量,常量一经定义,便无法修改指向。但是声明的变量不是常量,所以可以修改指针常量指向的值
2、常量指针 ?? ??? ?int a = 10; ?? ??? ?int b = 20; ?? ??? ?const int* p = &a; ?? ??? ?*p = 30; // 错误,常量指针指向的值不允许修改 ?? ??? ?*p = &b; // 正确,常量指针允许修改指针的指向 ?? ??? ?总结:常量指针允许修改指针的指向,但不允许修改常量指针指向的值。常量指针因为变量通过cont修饰为了常量,常量一经定义,不可修改,所以常量指针可以修改指针的指向,不能修改指向的值。
3、const即修饰变量,又修饰指针 ?? ??? ?int a = 10; ?? ??? ?int b = 20; ?? ??? ?const int* const p = &a; ?? ??? ?*p = 30; // 错误,指针指向的变量经过const修饰,无法修改 ?? ??? ?*p = &b; // 错误,指针变量经过const修饰无法修改 ?? ??? ?总结:变量与指针都经过const修饰后,都变成了常量,所以无论是指针或者指针指向的值都无法修改
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int b = 20;
// 指针常量
const int* p = &a;
//*p = 20; // 报错,指针常量不允许修改指针的值,只允许修改指针的指向
p = &b;
// 常量指针
int* const p2 = &a;
*p2 = 30;
// p2 = &b; //报错,常量指针不允许修改指针的指向
//const即修饰变量又修饰指针
const int* const p3 = &a;
//*p3 = 30; // 报错
//p3 = &b; // 报错,const即修饰变量又修饰指针,指向的值与指针的指向都不允许修改
system("pause");
return 0;
}
|