彻底理解——指针常量和常量指针、指向常量的常指针

彻底理解——指针常量和常量指针、指向常量的常指针前言 在汉语中 定语一般都放在中心词的前面 像 C 语言和 C 语言这种技术性语言 更是如此 所以定语重要还是中心词重要 肯定是中心词重要 如 美丽的女孩美丽的是定语女孩是中心词 女孩肯定是重要 是本质 同理 我们先不讲技术 先从字面意思来理解 指针常量 常量指针 函数指针 指针函数 数组指针 指针数组指针常量指针是定语 常量是中心词 所以指针常量本质是一个常量常量指针常量是定语 指针是中心词 所以常量指针本质是一个指针函数指针本质上是一个指针 那就

前言

  同理,我们先不讲技术,先从字面意思来理解:指针常量、常量指针、函数指针、指针函数、数组指针、指针数组

指针常量 指针是定语,常量是中心词,所以指针常量本质是一个常量
常量指针 常量是定语,指针是中心词,所以常量指针本质是一个指针
函数指针 本质上是一个指针,那就是指向函数的指针
指针函数 本质上是一个函数,只不过函数的类型是指针
数组指针 本质上是一个指针,只不过是指向数组的指针
指针数组 本质上是一个数组,只不过数组元素都是指针

一、 指针常量——指针类型的常量(int * const p)

巧记: const的作用就是将被修饰者限定为常量,所以const修饰谁,谁就是常量。

指针常量(指针本身是常量)

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

关键点:

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

白话解释:

  本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始化。用法如下:

int a = 10, b = 20; int * const p = &a; *p = 30; // p指向的地址是一定的,但内存地址空间中的内容可以修改 

二、 常量指针——指向“常量”的指针(const int *p, int const *p)

巧记:常量在指针前面, 程序语言: const在星号之前即可。

定义:又叫常指针,可以理解为常量的指针,指向的是个常量

关键点:

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

常量指针本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。在常量指针中,限制了通过这个指针修改变量的值,指针看起来好像指向了一个常量。用法如下:

int a = 10, b = 20; const int *p = &a; p = &b; // 指针可以指向其他地址,但是内容不可以改变 

判断程序的对错:

int main() { 
      char * str = “apple”; str = “orange”; cout << str << endl; getchar(); } 
int main() { 
      const char * str = "apple"; str = "orange"; cout << str << endl; getchar(); } 

这样写就能在vs2017和vs2019上编译通过了。

三、 指向常量的常指针

定义: 指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。

关键点:

  1. 一个指针常量,指向的是一个指针对象;
  2. 它指向的指针对象且是一个常量,即它指向的对象不能变化;
const int* const p; 

声明:

整理自博客:C/C++语言基础知识,欢迎大家访问原博客

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

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

(0)
上一篇 2026年3月26日 下午4:07
下一篇 2026年3月26日 下午4:08


相关推荐

  • request.getParameter();的意思[通俗易懂]

    request.getParameter();的意思[通俗易懂]对于httprequrest的request.getParameter()的作用,之前我只是在用它而不知道它到底有什么作用,今天看了一遍文章突然明白了其中的意思。  大致的内容如下:这个form提交请求后,在你的action中Stringname=request.getparameter(“name”);那么name的值就是“哈哈”  它是一种取参数的方法。

    2025年7月5日
    4
  • linux目录结构详解_docker文件目录

    linux目录结构详解_docker文件目录前言平常linux系统用的也不少,那么linux下的每个目录都是用来干什么的,小伙伴们有仔细研究过吗?让我们来了解下吧Linux系统目录结构登录系统后,在当前命令窗口下输入命令:[root@

    2022年7月30日
    21
  • go语言激活码【注册码】

    go语言激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    81
  • 4K型护套连接器_电缆网套怎么使用方法

    4K型护套连接器_电缆网套怎么使用方法LCYVB-4型钢丝编织橡胶护套连接器4C型护套连接器4K型护套连接器 范围 本标准规定了LCYVB-4型钢丝编织橡胶护套连接器(简称连接器)的产品分类、基本参数、技术要求与试验方法、检验规则、标志、包装、运输和贮存。本标准适用于LCYVB-4型钢丝编织橡胶护套连接器系列产品。 规范性引用文件 下列件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成…..

    2022年10月2日
    4
  • 给织梦DEDECMS添加栏目图片与英文名显示

    给织梦DEDECMS添加栏目图片与英文名显示

    2021年9月24日
    55
  • 强化学习: 贝尔曼方程与马尔可夫决策过程

    强化学习: 贝尔曼方程与马尔可夫决策过程强化学习 贝尔曼方程与马尔可夫决策过程一 简介贝尔曼方程和马尔可夫决策过程是强化学习非常重要的两个概念 大部分强化学习算法都是围绕这两个概念进行操作 尤其是贝尔曼方程 对以后理解蒙特卡洛搜索 时序差分算法以及深度强化学习算法都至关重要 这篇文章主要介绍贝尔曼方程 常用的资料 Reinforcemen AnIntroducti author RichardS SuttonandAnd BartoUCLCour https www dav

    2026年3月19日
    2

发表回复

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

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