指针常量和常量指针

常量指针与指针常量是两个很容易被混淆的概念,他们的核心是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 是正确的。

 

posted @ 2019-08-22 11:18  fuluoerde  阅读(587)  评论(0编辑  收藏  举报