1、指向对象的常指针
把指向对象的指针变量声明为const型并将之初始化,这样指针始终保持为初值,不能改变,也就是说它的指向始终不会改变。
定义指向对象常指针格式:
类名
* const 指针变量名 = &对象名(对象地址);
例如:Person p("zhangsan",20),p2;
//定义对象
Person * const p3 = &p;
//const位置在指针变量名前面,指定p3为常量。指向p1,指向不会再改变。
p3
= &p2;
//这条语句错误,因为const修饰的变量一旦赋值,其值不会再改变。
在什么情况下使用指向对象的常指针呢?
想要实现一个指针固定地与一个对象相联系也就是让这个指针始终指向一个对象,那么我们就将定义一个指向对象的常指针。这样做的好处是:在编程过程中防止误操作,增加安全性。
什么是指向对象的指针变量,那什么是指向常变量的指针变量?
下面是定义了一个指向常变量的指针变量:
const char *p;
如何理解上边的定义?我们需要注意的是在定义指向常变量的时,const在数据类型的最左边,与数据类型紧连,表示指针变量p指向的char变量是常变量,不能通过p来改变其值。
定义指向常变量的指针变量的一般格式:const 类型名 * 指针变量名;对指向常变量的指针变量有以下几个说明:
1、如果一个变量被声明常变量,只能使用指向常变量的指针变量只能使用指向常变量的指针变量指向它,而不能用一般的指针变量指向它。
以上理解指向常变量的指针变量,由此来理解指向常对象的指针变量,我们要注意两点:
在此记住一条规则:当希望在调用函数时,对象的值不会被改变,就要把形参定义为指向常对象的指针变量,同时用对象的地址作为实参(对象可以使const型的也可以是非const型的)。若希望对象不仅在函数调用的过程中不会改变,也要在程序的执行过程中不会改变,那就把对象定义为const型的。
2、指向常对象的指针变量
2、指向常变量的指针变量不仅可以指向常变量,还可以指向未被声明为常变量的变量,但是注意一点:这个指针变量不能修改该变量的值。
3、如果函数的形参是指向非const的变量指针,实参只能用非const变量的指针;
如果函数的形参是指向const的变量指针,也就是说在执行的过程中不能改变指针的指向,实参用const变量的指针,或非const的指针变量。
1、当一个对象已被声明为常对象,这时,只能使用指向常对象的指针变量来指向它。
2、当定义了一个指向常对象的指针变量,而用它指向一个非const型的的对象,不能指针该改变期指向的对象。
3、指向常对象的指针变量最常用于形参,它的好处在于保护保护形参所指向的对象在函数执行的过程中指向不会被改变。