const char *p;
如果一个变量已经被声明为常变量,那么只能用指向常变量的指针变量去指向它,而
不能用一般的指针变量。另外,指向常变量的指针变量除了可以指向常变量外,还可以指
向未被声明为 const 的变量,但也不能通过该指针改变其值。例如:
char c='a' //定义字符变量 c,未声名为 const
const char *p; //定义指向常变量的指针变量 p
p=&c; //p 指向字符变量 c
*p='b'; //非法
c='b'; //合法
说明:上例中,指针变量 p 指向字符变量 c,并不说把 c 也声明成常变量,而只是说在
通过指针变量引用 c 时,c 具有常变量的特征,其值是不能改变的,但 c 仍然是一个普通
变量。
在指向常变量的指针中,关于函数形参的指针类型有几点值得注意:
如果函数形参是非 const 型指针变量,实参只能用指向非 const 型指针;如果函数形参
是指向 const 型变量的指针,实参则可以是 const 型的或非 const 型的指针变量。换句话说
就是指向常变量的指针可以指向 const 和非 const 型的变量,而指向非 const 型变量的指针
只能指向非 const 的变量。
用指针变量作形参时形参和实参的对应关系表
形参 实参 合法与否 改变指针所指对象的值
指向非 const
型变量的指针 非 const
变量的地址 合法 行
指向非 const
型变量的指针 const
变量的地址 非法 /
指向 const
型变量的指针 const
变量的地址 合法 不行
指向 const
型变量的指针 非 const
变量的地址 合法 不行
下面说到正题,指向常对象的指针变量和指向常变量指针变量类似。
如果一个对象已经被声明为长对象,只能用指向常对象的指针变量指向它,而不能用
一般的指针变量指向它。
如果定义了一个指向常对象的指针变量且使它指向一个非 const 的对象,其指向的对象
不能通过指针来改变。
如果定义了一个指向常对象的指针变量,是不能通过它改变所指向的对象的值的,但
是指针变量本身的值是可以改变的。
如:
Time t1(8,8,8),t2; //定义对象
const time *p=&t1; //定义指向常对象的指针 p,并使它指向 t1
p=&t2; //合法,指针 p 指向对象 t2
所以当我们希望在调用函数时对象的值不被修改,我们就可以把形参定义为 const 型的
指针变量,同时用对象的地址作实参(对象可以是 const 或非 const 型);当要求对象不
仅在调用函数中不被改变,而且在程序执行过程中也不发生改变,我们就把它定义为
const 型。所以指向常对象的指针最常用于函数的参数,以保护形参指针所指向的对象在
函数执行过程中不被修改。
以上是我学习 C++指针时的记录,也是对 C++指针用法的总结,我想对大家学习 C++
应该是很有帮助的。