前言
在实际的开发过程中,您是否听过指针常量和常量指针?又是否知道它们之间的区别呢?虽然两者的名称是非常相似的,但是两者的工作原理却有着很大的区别。
本文目的便是希望能够让大家理解起来更加容易,如有不足和疏漏之处,还望各位读者不吝指正,谢谢!
指针常量
概念
指针本身是一个常量,即指针的指向是不能更改的,但是可以通过指针修改指向的变量的值。
程序说明
int testNum1 = 60,testNum2 = 90;//初始化两个整型变量
int * const pNum = &testNum1;//将testNum1的地址赋值给pNum
*pNum = 88;//通过指针修改testNum1的值
pNum = &testNum2;//错误,pNum只能指向testNum1变量,而不能更改指向
常量指针
概念
指针指向一个常量数据,即不能通过指针修改指向的变量,但是可以直接更改该变量的值,也可以修改指针的指向。
程序说明
int testNum1 = 20,testNum2 = 30;
const int* pNum = &testNum1;//将testNum1的地址赋值给pNum指针变量
*pNum = 50;//错误,尝试通过常量指针修改testNum1变量,这是不合法的
testNum1 = 60;//可以直接修改testNum1变量的值
pNum = &testNum2;//将testNum2变量的地址赋值给pNum,这是合法的
cout << "testNum2的值为:" << *pNum << endl;//输出30
两者的结合
在实际应用中,如果既不希望更改指针的指向,也不希望更改指针指向的变量的值,那么可以结合上述两种方法进行实现。
程序说明如下:
int testNum1 = 88,testNum2 = 99;
const int* const pNum = &testNum1;
*pNum = 100;//错误,不能通过pNum修改testNum1的值
testNum1 = 200;//正确,可以直接修改变量的值
pNum = &testNum2;//错误,不能修改pNum的指向