background image

    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++
应该是很有帮助的。