今天学习C++的时候,遇到了两个问题:常量指针?指针常量?我的天啊看了好些遍书本还是模模糊糊的。在网上找了一些网友写的文章,才恍然大悟。
区别:const int *prt 和 int *const prt。
const int *prt 称为常量指针 (指向常量的指针)
int *const prt 称为指针常量 (该指针就是常量)
例子:
//常量指针 :指向常量的指针
const int *pi;
int ival1 = 30;
int ival2 = 40;
pi = &ival1; //指针指向ival1
cout<<"指向ival1: "<<*pi<<endl;
pi = &ival2;//指针可以在任意时候重新赋值一个新内存地址
cout<<"指向ival2: "<<*pi<<endl;
*pi = 100;//报错了
pi指向的地址可以被修改(重新指向另一个地址),但不能通过*pi 方式来改变变量的值。
有网友的解释是: const 修饰了*pi (区分一下 *pi 和pi),所以*pi是一个常量,不能通过*pi方式来改变值
而pi并没有被修饰,所以pi是一个变量,所以能被重新赋值。
//指针常量(该指针就是常量)
int ival1 = 30;
int ival2 = 40;
int *const prt = &ival1;
cout << "指向ival1 :"<<*prt<<endl;
prt = &ival2;//报错,prt不能再指向另一个新地址
*prt = 100;
cout << "修改ival1的值 :"<<*prt<<endl;
按照上面的解释可以得到: const 修饰了prt,所以prt是一个常量,不能被重新赋值。
而*prt 没有被const修饰,所以*prt 是变量,能通过*prt方式重新赋值。
个人感觉这种解释的方式还是挺合适的。要是有更好的解释,可以留言一下,我学习学习。