前言

  在汉语中,定语一般都放在中心词的前面,像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();
}

这个在vs2015上能够编译通过,但是在vs2017和vs2019上是不能编译通过的。
分析:因为"apple" 是存储在全局(静态变量)区,是只读的,不能修改。所以指向只读常量的指针必须声明为常量指针才能编译通过。

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

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

三、 指向常量的常指针

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

关键点:

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

声明:

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

彻底理解——指针常量和常量指针、指向常量的常指针相关推荐

  1. C++:将char*指针强制转换成一个指向结构体的指针

    在使用Socket与雷达进行通信采集数据时,会遇到"打包与解包"的问题,在打包和解包过程中,会涉及到结构体指针与字符指针间的强制转换.如下: 打包就是将包头与信息封装成一定大小的包 ...

  2. c语言定义指向结构体的指针,C语言入门教程-指向结构体的指针

    指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.创建结构体指针是极常见的.下面是一个例子: typedef struct {char name[21];char ci ...

  3. 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

    [转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...

  4. 常指针和指向常量的指针

    最近在学习引用,有一些学习心得,记录如下: 1:引用是变量的别名 int a; int b&=a; 要注意引用只有声明,而没有定义,并且引用必须在声明的时候进行初始化,一旦与某个变量关联起来, ...

  5. c语言中的字节和元素,C语言指向数组元素的指针

    指向数组元素的指针和运算法则 所谓指向数组元素的指针,其本质还是变量的指针.因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针. 指向数组元素的指针不难,但很 ...

  6. c语言指针指向数组首地址,C语言指向数组元素的指针

    指向数组元素的指针和运算法则 所谓指向数组元素的指针,其本质还是变量的指针.因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针. 指向数组元素的指针不难,但很 ...

  7. 函数指针、函数返回指针、const指针、指向const指针,指向const的const指针。

    ①函数指针 函数指针是指向函数的指针变量. 因而"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所 ...

  8. C语言结构体的定义与使用、结构体数组、指向结构体的指针(有代码详解)

    1.结构体的定义与使用 结构体是一种构造数据类型 把不同类型的数据组合成一个整体 结构体的定义形式: struct 结构体名{结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数 ...

  9. C语言中Const指针变量(常指针)

    C语言中,指针是最难理解的一部分,尤其是Const指针变量. Const指针变量只保护其Value值不被改变,并不能保护指针所指向的地址中的值不被改变,下面是针对Const指针的一个小练习: #inc ...

  10. 【C++---16】常指针和常引用

    Coordinate coor1(3,5); //定义一个普通对象const Coordinate &coor2 = coor1; //coor2是对象的常引用const Coordinate ...

最新文章

  1. 任正非迷茫的背后是华为在“治未病”
  2. 200m的共享虚拟主机够用吗
  3. 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
  4. Android RecyclerView使用详解(一)
  5. 图解金山网盾3.6下载保护实现原理
  6. 【intellij idea 高级用法之:集成JIRA、UML类图插件、集成SSH、集成FTP、Database管理 】
  7. 在Objective-C中分类对象和方法
  8. oracle服务没有了 原因,一例oracle服务无法启动的原因及解决方法
  9. IIS Express URL Rewrite无效
  10. Ubuntu 16.04中的Dock的应用顺序调整
  11. maya如何导出ue4_MAYA动画导出以及导入UE4的方式、方法
  12. 地震 matlab,MATLAB在地震信号处理中的应用实例.docx
  13. 扣扣机器人唱歌_qq小冰机器人唱歌脚本-qq群机器人小冰无限唱歌插件下载v6.7.1 安卓版-腾牛安卓网...
  14. docker镜像的获取删除和查看镜像信息历史记录清理残余镜像
  15. 柬埔寨招聘中文计算机,柬埔寨ll中文老师1000美金+招聘机会来啦,快来围观!!!...
  16. 微信小程序经典案例开发(微信开发)
  17. JMeter 扩展开发:扩展 TCP 取样器
  18. java 汉字个数_java语言中如何获取字符串中汉字的个数
  19. hexo如何进行hexo的博客编写
  20. 通联互联网支付网关商户接口技术规范

热门文章

  1. python自动化测试selenium(四)切换页面、切换窗口
  2. apriori算法 python实现
  3. 2021年安全员-B证(广西省-2021版)考试题库及安全员-B证(广西省-2021版)考试内容
  4. 软件智能:aaas系统AI众生的“世”和“界” 之21 整定问题空间和标定解决方案空间之1
  5. 如何在服务里面删除应用(比如说删除掉服务里面的tomcat)?
  6. maya! board_Maya"普天同庆"病毒解决方案来了
  7. flinkSQL Table转DataStream
  8. Linux下socket编程:TCP连接
  9. 【Linux】Linux 下socket 编程
  10. Win10 无法加载操作系统,因为无法验证文件或某个xx数字签名 蓝屏错误代码0xc0000428