代码改变世界

当指针遇到const关键字

2013-10-28 21:37  Ross Wang  阅读(440)  评论(0编辑  收藏  举报

当指针遇到const,绝对不会像北京遇到西雅图那么有趣:

#include<iostream>
using namespace std;

int main() 
{ 
    char cVar = 'a';
    cVar == 'c';//可以

    const char ccVar = 'b';
    //ccVar = 'd';//不可以,常量字符类型不允许修改-本行无法通过编译

    //定义指向char的指针并赋值。
    char * pcVar = &cVar;
    *pcVar = 'e';//可以
    char newChar = 'f';
    pcVar = &newChar;//可以修改指针指向的相同类型的其他变量

    //定义指向char的const指针并赋值。
    char * const cpcVar = &cVar;
    *cpcVar = 'g';//可以
    newChar = 'h';
    //cpcVar = &newChar;//不可以修改常量指针-本行无法通过编译

    //下面两条语句等价,都是定义指向const char的指针并赋值。
    const char * pccVar1 = &ccVar;
    //*pccVar1 = 'i';//不可以,不能通过指针修改字符类型常量-本行无法通过编译
    char const * pccVar2 = &ccVar;
    //*pccVar2 = 'i';//不可以,不能通过指针修改字符类型常量-本行无法通过编译

    //下面两条语句等价,都是定义指向const char的const指针并赋值,无论是常量指针本身还是其指向的常量字符都不允许修改。
    const char * const cpccVar1 = &cVar;
    char const * const cpccVar2 = &cVar;

    /***************************
    以上是简单的指针和const关键字结合使用的情况。
    再复杂一点的情况如下所示,已经很难理解了。
    ***************************/

    //定义指向char的指针的指针并赋值。
    char * * ppcVar = &pcVar;

    //定义指向char的const指针的指针并赋值。
    char * const * pcpcVar = &cpcVar;

    //定义指向char的指针的const指针并赋值。
    char * * const cppcVar = &pcVar;

    //下面两条语句等价,都是定义指向const char的指针的指针并赋值。
    const char * * ppccVar1 = &pccVar1;
    char const * * ppccVar2 = &pccVar1;

    //下面两条语句等价,都是定义指向const char的指针的const指针并赋值。
    const char * * const cppccVar1 = &pccVar1;
    char const * * const cppccVar2 = &pccVar1;

    //下面两条语句等价,都是定义指向const char的const指针的指针并赋值。
    const char * const * pcpccVar1 = &cpccVar1;
    char const * const * pcpccVar2 = &cpccVar2;

    //下面两条语句等价,都是定义指向const char的const指针的const指针并赋值。
    const char * const * const cpcpccVar1 = &cpccVar1;
    char const * const * const cpcpccVar2 = &cpccVar2;
    
    return 0; 
    
}