再学C/C++ 之 指针常量 和 常量指针

(1)指针常量,将指针的指向当成常量。即指针变量的值只能在定义的时候初始化,定义后不能修改,也就是说不能改变指针变量的指向。但是不影响所指对象的访问特征。其定义形式为:

类型 * const 指针
//类型是该指针所指对象的类型,*为指针类型说明符。

实例1:

int var1 = 100;
    int var2 = 200;

    //初始化指针常量,
    int *const const_P1 = &var1;
    //指针常量值定义指针的指向不能修改,
    //如,这里将const_P1指向var2的地址,就错了,
        //下面的语句会报错
    const_P1 = &var2;
    //但是,指针常量不影响指针所指对象的访问特征,
    //即,这里可以修改const_P1的对象的值
    *const_P1 = 200;

    //输出200;
    cout << *const_P1 << endl;
    //输出200;
    cout << var1 << endl;

(2)常量指针,又称为指向常量的指针,意思是,将指针所指的对象当成一个常量,即其访问特征为常量,但是,指针的指向可变。定义的形式:

类型 const * 指针
或者
const 类型 * 指针
//类型是该指针所指对象的类型,*为指针类型说明符。

实例2:

    int var1 = 100;
    const int var2 = 200;

    const int * P1;
    const int * P2;
    P1 = &var1;
    //上面的语句将P1指向var2,就是将其访问特性设置为常量,即不可修改,
    //所以下面的语句会报错。
    *P1 = 1000;
    //常量指针不影响指针的指向,所以这里可以重新指向var2
    P1 = &var2;

注意:a、常量指针,无论所指的对象是否为常量,均不能通过*p修改。

   b、为了保证标识常量的只读性,常量的地址只能赋给常量指针(即指向常量的指针)。

(3)总结的来说,指针常量,就是把指针当成常量(指向不可变);常量指针,就是把所指对象当成常量。

如果读者,对此还是记不住的话,可以参考这篇文章:http://www.cnblogs.com/jonnyyu/archive/2005/06/19/89766.html

原文地址:https://www.cnblogs.com/scutwang/p/3650192.html