• 指针常量和常量指针


    常量指针与指针常量是两个很容易被混淆的概念,他们的核心是const关键字,const限定一个变量不允许被改变。const在一定程度上可以提高程序的安全性和可靠性。

    指针常量

        定义:

             本质是一个常量,而用指针修饰它。指针常量的值是指针,这个值因为是常量,所以不能被赋值。 

        关键点:

              1.它是个常量!
              2.指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化;


    格式为:

    int * const p //指针常量

    在这个例子下定义以下代码:

    int a,b;
    int * const p=&a //指针常量
    //那么分为一下两种操作
    *p=9;//操作成功
    p=&b;//操作错误

    因为声明了指针常量,说明指针变量不允许修改。如同次指针指向一个地址该地址不能被修改,但是该地址里的内容可以被修改

    常量指针

      定义:

              又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量。如果在定义指针变量的时候,数据类型前用const修饰,被定义的指针变量就是指向常量的指针变量,指向常量的指针变量称为常量指针

         关键点:

              1.常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;
              2.常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;
              3.指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址;

     代码形式:

              int const* p;  const int* p;

    在这个例子下定义以下代码:

    int a,b;

    const int *p=&a //常量指针
    //那么分为一下两种操作
    *p=9;//操作错误
    p=&b;//操作成功

    因为常量指针本质是指针,并且这个指针是一个指向常量的指针,指针指向的变量的值不可通过该指针修改,但是指针指向的值可以改变。

    附加题
    指向常量的指针常量该怎么写?
    答案:const int * const b = &a;//指向常量的指针常量

    下面通过一个例子来解析 常量指针 和 指针常量,我们先总结一下 常量指针 和 指针常量 的区别

    首先一定要明白哪种定义方式是常量指针,哪种是指针常量,这里可以记住三句话加深记忆:

    * (指针)和 const(常量) 谁在前先读谁 ;*象征着地址,const象征着内容;谁在前面谁就不允许改变。

    好吧,让我们来看这个例子:

       int a =3; 

      int b = 1; 

      int c = 2;  

      int const *p1 = &b;//const 在前,定义为常量指针  

      int *const p2 = &c;//*在前,定义为指针常量   

    常量指针p1:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。   

        p1 = &a是正确的,但 *p1 = a是错误的。
    指针常量p2:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
        p2= &a是错误的,而*p2 = a 是正确的。

     

  • 相关阅读:
    POJ 3211 (分组01背包) Washing Clothes
    CodeForces 489D Unbearable Controversy of Being
    CodeForces 489C (贪心) Given Length and Sum of Digits...
    CodeForces 489B (贪心 或 最大匹配) BerSU Ball
    CodeForces 489A (瞎搞) SwapSort
    CodeForces 474.D Flowers
    UVa 1252 (状压DP + 记忆化搜索) Twenty Questions
    UVa 10817 (状压DP + 记忆化搜索) Headmaster's Headache
    【读书笔记】莫比乌斯函数与莫比乌斯反演
    UVa 11437 (梅涅劳斯定理) Triangle Fun
  • 原文地址:https://www.cnblogs.com/kevinnote/p/11393225.html
Copyright © 2020-2023  润新知