常指针和指针常量区分

常指针和指针常量区分前言 对于初学者而言 常指针和指针常量是特别容易混淆的两个概念 所以我准备了自从我学习 C 以来对两个概念做的最通俗易懂的阐述 希望能对你有所帮助 不当之处希望大家能批评留言指正 No 1 常指针 什么是常指针 首先说明 常指针是指向常量的指针 这是习惯说法 但是并不准确 常指针的准确定义 不可以通过

 前言:

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

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

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

 

No.1常指针

① 什么是常指针?

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

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

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

      

②常指针是干什么用的?

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

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

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

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

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

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

 

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

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

  实例: const        int          *    ptint;

 

 

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

const int* ptint=NULL; //常指针定义时候不一定要初始化 int a=10; //定义一个整形变量a ptint=&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;

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177963.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:20
下一篇 2026年3月26日 下午6:20


相关推荐

  • pycharm+anaconda_pycharm和anaconda区别

    pycharm+anaconda_pycharm和anaconda区别python自身缺少numpy、matplotlib、scipy、scikit-learn…等一系列包,需要我们安装pip来导入这些包才能进行相应运算(python3.5自带了get-pip.py,不需额外下载安装),在cmd终端输入:pipinstallnumpy就能安装numpy包了。每次都额外安装所需要的包略麻烦,这时候我们可以采用anaconda了。anaconda是一个python发行版,包含了大量的包,使用anaconda无需再去额外安装所需包。安装完anaconda,就相当于安装了Py

    2022年8月26日
    8
  • CSS图片去色[通俗易懂]

    CSS图片去色[通俗易懂].imgFilter{filter:grayscale(100%);-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%);-ms-filter:grayscale(100%);…

    2022年10月5日
    4
  • 十进制到八进制的转换方法

    十进制到八进制的转换方法1 间接法 先将十进制转换成二进制 然后将二进制又转换成八进制 2 直接法 前面我们讲过 八进制是由二进制衍生而来的 因此我们可以采用与十进制转换为二进制相类似的方法 分为整数部分的转换和小数部分的转换 整数部分方法 除 8 取余法 即每次将整数部分除以 8 余数为该位权上的数 而商继续除以 8 余数又为上一个位权上的数 这个步骤一直持续下去 直到商为 0 为止 最后读数时候 从最后一个余数起

    2026年3月17日
    2
  • java索引越界异常_如何处理Java数组索引越界异常?

    java索引越界异常_如何处理Java数组索引越界异常?通常 数组的大小固定 并且使用索引访问每个元素 例如 我们创建了一个大小为 9 的数组 然后 用于访问该数组元素的有效表达式将为 a 0 至 a 8 长度为 1 每当使用 ve 值或大于或等于数组大小的值时 都会引发 ArrayIndexOu 例如 如果执行以下代码 它将显示数组中的元素 并要求您提供索引以选择一个元素 由于数组的大小为 7 因此有效索引为 0 到 6 示例 i

    2026年3月19日
    2
  • 图书管理系统——用例图、类图、时序图

    图书管理系统——用例图、类图、时序图一 图书管理系统 用例图二 图书管理系统 类图三 图书管理系统时序图

    2026年3月16日
    2
  • Vim配置文件vimrc入门介绍

    Vim配置文件vimrc入门介绍本文转载自:vim教程网Vim入门级基础配置-Vim入门教程(1)介绍Vim配置文件.vimrc,配置Vim显示行号、支持utf8中文不乱码、突出显示Vim当前行,设置高亮显示括号匹配和tab缩进,解决Vim粘贴时多出缩进和空格问题。一、Vim配置文件.vimrcVim编辑器相关的所有功能开关都可以通过.vimrc文件进行设置。.vimrc配置文件分系统配置和用户配置两种。系…

    2022年4月30日
    111

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号