常指针和指针常量区分

前言:

         对于初学者而言,常指针和指针常量是特别容易混淆的两个概念。

         所以我准备了自从我学习C++以来对两个概念做的最通俗易懂的阐述,希望能对你有所帮助,

         不当之处希望大家能批评留言指正。

No.1常指针

① 什么是常指针?

首先说明,常指针是指向常量的指针,这是习惯说法,但是并不准确

常指针的准确定义:不可以通过  指针本身的间接引用   来修改  指针所指向的内容 的一类型指针叫常指针。

综上得出一个结论:常指针指向的数据既 可以是常量也可以是变量,只是不能通过指针去改变数据的内容。

      

②常指针是干什么用的?

既然设置了这种指针就必然有它的用途^0^,那么

常指针是拿来做什么的呢?

答案是:保护数据不被修改。

当指针作为函数的形式参数时候并不一定要修改指针所指向的数据。例如,在调用一个求数组最大值的函数时候,

就不希望数组的值被修改发生变化,反而希望在函数中能够限制对数组元素的修改,这时候就可以用到常指针来达到目的。

(实际编程时候,代码量是非常的大,不设置常指针就有指针所指向内容被修改的风险,这是逻辑错误,编译器无法报错。)

③常指针的定义格式如下:

  格式: const   数据类型名  *  指针名;    

  实例: const        int          *    ptint;

④下面一段代码可以帮助你加深对常指针的用法:

const int* ptint=NULL;    //常指针定义时候不一定要初始化
      int a=10;          //定义一个整形变量a
      pting=&a;          //将指针ptint指向a
     *ptint=100;         //错误用法,因为ptint是常指针,不能通过指针本身的引用来修改指针所指向的
                         //内容(指针ptint指向变量a)    
      a=100;             //正确                    
                         
      
     int b=10;           
     ptint=&b;          //正确
      

小结:常指针,不管指向的是变量还是常量,都别想通过我指针本身的引用来修改我指向的内容。

就像上述代码,变量a可以赋值成100(自己修改自己),但是不可以通过指针ptint来修改a的内容。

常指针,我保护我指向的内容,但我可以选择我要保护的人。如上述代码,ptint可以指向a,也可以指向b,

我指向谁就保护谁。

NO.2指针常量

①什么是指针常量?

指针常量:指针本身的内容是常量,不可以改变。

指针也是一种数据类型,只不过它存的是地址,所以说指针也有变量和常量之分,就像一个整型数据也有变量和常量之分。

整型常量一旦定义(定义时候必须初始化),就不能通过赋值再改变整型常量的内容。

同理,指针常量一旦定义(定义同时必须初始化),就不能通过赋值再改变指针所存的地址。

绕了一大圈子只想说明一个结论:指针常量只指向一个固定的地址,不能再指向其它地址。

(但指针指向的内容可以通过指的针本身的间接引用来改变。)

    

②指针常量的定义格式如下:

    格式:         数据类型名    *    const    指针名;

    实例:              int              *    const         p;

③下面一段代码可以加深你对指针常量的理解:

//对比一下两个例子,其实道理都是一样的

const int a=10;  //定义一个整型常量
          a=100; //错误,因为a是常量


int b=10;
int c=10;
const int * p=&a;     //(常量定义的时候即初始化)
            p=&b;    //错误,因为p是指针常量,只能指向a
           *p=100;  //正确

NO.3区分方法

其实按照名字就可以都出来:

const          int *       p;

 常量          指针                              ===============》常指针

int*          const       p;

指针        常量                               ===============》指针常量

为了记住它们的区别,最好的方法就是多用啦。

猜你喜欢

转载自blog.csdn.net/qq_40780910/article/details/81297144