首页 > 代码库 > 指针和const限定符
指针和const限定符
指向const对象的指针,例如:const int *pival;pival是以个指向int类型const对象的指针,const限定pival指针所指向的对象类型,而并非pival本身,也就是说,pival并不是const,在定义时不需要对它进行初始化,如果需要,允许给pival重新赋值,使其指向另外一个const对象,但不能通过pival修改所指对象的值。
*pival = 10;//error:pival is a plain pointer
把一个const对象的地址赋值给一个普通的、非const对象的指针也会导致编译时的错误:
const int pival = 1;
int *pival2 = &pival;//error:pival is a plain pointer
const int *pival3 = &pival;//ok
不能使用指向const对象的指针修改基础对象,然而如果该指针指向的是一个非const对象,可以用其他方法修改所指向的对象。可以把指向const的指针理解为"自以为指向const的指针"。例如:
double pi = 3.14;
const double *cptr = π
cout<<*cptr<<endl;//3.14;
pi = 3.15;
cout<<*cptr<<endl;//3.15;
在实际的程序中,指向const的指针常用作函数的形参。确保传递给函数的实际对象在函数中不因为形参而被修改。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const 指针
int errNumB = 0;
int *const currErr = &errNumb;//currErr是指向int类型对象的const指针,与其他const常量一样,const指针的值不能修改,意味着不能使currErr指向其他对象。必须在定义时初始化。
指针本事是const的事实并没有说明是否能勇士该指针修改它所指向对象的值。指针所指向对象的值能否修改完全取决于该对象的类型。
我们可以 *currErr = 0;