C语言中Const与指针(转载)

 一、说明指针常量、指向常量的指针和指向常量的常量指针的含义、区别和共同点

    首先,以上三种概念的共同点:都指的是指针

    指针也是一种变量,它存储指定类型的变量的内存地址,如char* 来声明一个字符型指针变量,跟其它变量一样,当其值不可改变时,该指针变量就成为了指针常量,既是常量,它当然一直指向同一个内存地址,而不能被改变。

    指向常量的指针顾名思义就是说其指向的那个地址的值不是变量而是常量了,即其指向的内存地址的内容将不能被改变,而指针本身则可以改变。

    指向常量的指针常量最好理解,结合以上两者的含义即可知道,其特点就是指针本身的值(即指向的内存地址)和指针指向内存地址的内容均是常量,不能被改变。

二、const的应用举例及说明

    //指针常量

    char  str[5] = "abcd";   //声明一个字符数组

    char * const pStr = str; //让pStr指针指向字符数组变量str;pStr该指针常量值(即指向的内存地址)不能被改变。

   //分别执行以下语句的结果,可以体现它的特点

   pStr = "asdfaf" ;      //企图让pStr 指针常量指向另一个地址,结果报错!

   *pStr = 'd';    //修改pStr指针常量指向的内存地址中第一个字符的内容为d,结果正确,第一个字符被修改。

  //指向常量的指针

    char  str[5] = "abcd";   //声明一个字符数组

    const char * pStr = str; //让pStr指针指向字符数组常量str,该字符数组不能被改变;

   //分别执行以下语句的结果,可以体现它的特点

   pStr = "asdfaf" ;      //让pStr 指针常量指向另一个地址,结果正确,pStr不再指向str字符数组常量,而指向了字符串asdfaf的首地址!

   *pStr = 'd';    //修改pStr指针常量指向的内存地址中第一个字符的内容为d,结果错误,常量不能被修改。

    //指向常量的指针常量

    char  str[5] = "abcd";   //声明一个字符数组

    const char * const pStr = str; //让pStr指针指向字符数组常量str,该字符数组不能被改变;

   //分别执行以下语句的结果,可以体现它的特点

   pStr = "asdfaf" ;      //让pStr 指针常量指向另一个地址,结果错误,此时是指针值不能被改变!

   *pStr = 'd';    //修改pStr指针常量指向的内存地址中第一个字符的内容为d,结果错误,此时是内容不能被改变。

 三、const声明的变量必须要进行初始化赋值

   如果错过了这个机会,以后就别想再给常量赋值了

  const  int a = 0  和  int const a = 0的作用相同

  const要求所修饰的对象为常量,不可被改变,不可作为左值

原文地址:https://www.cnblogs.com/NewZealand/p/3409746.html