我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++常量指针,指针常量,指向常量的常指针详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++常量指针,指针常量,指向常量的常指针详解

什么是指针

指针就是指向变量在内存中的地址

数据是存放在内存中的,每一个变量都有一个内存地址,假设是一个int类型变量a,占4个字节的内存区,那么在内存中如果是小端方式存储,我们创建指针p,把a的地址赋值给p,就是把a的首地址0x1100赋值给指针p,这个时候p的值就是变量a在内存中的首地址


int a =10;
int*p;
p=&a; //把a的首地址赋值给P

也就是说指针的值是这块内存区域的首地址

在这里插入图片描述

内存地址

内存是一个很大的,线性的字节数组,每一个字节都是固定8个二进制位组成,计算机对每个内存单元都进行了编号,这个编号就称为内存地址,地址决定了内存单元在内存中的位置

指针所占内存

32位系统中,处理器一次能处理的最大位数是2的32次方 ,也就是一次处理4个字节的内存数据,哪么指针的长度也就是4个字节。

64位系统中,处理器一次能处理的最大位数是2的64次方 ,也就是一次处理8个字节的内存数据,哪么指针的长度也就是8个字节。

32位系统指针4个字节 64位系统8个字节

const 变量

const 是 constant 的缩写,本意是不变的,不易改变的意思

也就是说使用const修饰的变量,其值是不允许改变的


const int  a = 7; 
int  b = a; // 正确
a = 8;       // 错误,不能改变

指针常量,常量指针和指向常量的指针

在了解了上面的基础知识之后,我们来看一下什么是指针常量,常量指针和指向常量的指针

首先说一下怎么快速的记住他们的区别,只需要按照命名的顺序来读,就可以很好地记忆

比方说:


int * const p =&a;

首先是一个指针int * , 然后一个const常量 那么p就是指针常量


const int *p=&a;

首先是一个const常量, 然后一个指针int * 那么p就是常量指针

是不是很好记忆

指针常量


int * const p =&a;

特点:指针的指向不可以修改,指针指向的内存的值可以修改

因为const的功能就是限定不可以修改,所以我们看到指针常量是先有了int *指针,再有的const修饰p 所以p的值(指向的内存地址) 是不可以修改的

也就是const限制的是指针p的值,但是没有限定p指向的内存地址里的数据,所以内存的数据可以修改

举例:


int a=10;
int * const p =&a;  //定义指针常量,指向int a的地址
*p = 20; //正确,指向的内存地址中的数据可以修改   
p=&b;  //错误,指向的内存地址不可以修改

箭头是指针指向的内存值,是不可以修改的,但是指向的内存地址中的数据可以修改

在这里插入图片描述

常量指针


const int *p=&a;

特点: 指针的指向可以修改,但是指针指向的值不可以修改。

常量指针,首先要是常量。就是指向的值要是一个常量,但是指向的内存地址不做限制


int a=10;
int b=10;
const int *p=&a;  //定义常量指针,指向int a的地址
*p = 20; //错误,指向的内存地址中的数据不可以修改   
p=&b;  //正确,指向的内存地址可以修改

箭头是指针指向的内存值,是可以修改的,但是指向的内存地址中的数据要和之前的一致

在这里插入图片描述

指向常量的常指针


const int const *p=&a;

特点: 指针的指向不可以修改,指针指向的值也不可以修改。

两个const限制,一旦指向之后就不可以做修改了


int a=10;
int b=10;
const int const *p=&a;  //定义指针常量,指向int a的地址
*p = 20; //错误,指向的内存地址中的数据不可以修改   
 p=&b;  //错误,指向的内存地址不可以修改

在这里插入图片描述

空指针、野指针

空指针就是指向地址为空的指针

注意:空指针指向的内存是不可以访问的


//-------空指针-------//
int *p4 = NULL;
//cout << *p4 << endl; //运行Error,使用指针时必须先判断是否空指针

野指针是指针指向了一个随意的内存地址,如果使用,会造成不可预知的内存错误


//-------野指针(悬浮、迷途指针)-------//
int *p5 =0x1100;  //任意赋值的野指针
//cout << *p5 << endl; //运行Error
int *p6 = new int(5);
delete p6;  //删除p6的指向
p6 = NULL; //一定要有这一步,否则p6会随机的指向一个地址

请添加图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++常量指针,指针常量,指向常量的常指针详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么理解C++指针常量和常量指针

本篇内容主要讲解“怎么理解C++指针常量和常量指针”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解C++指针常量和常量指针”吧!术语常量指针和引用类似,可以定义指针可以指向常量或者非常量类
2023-06-30

C++中指针常量与常量指针的区别是什么

在C++中,指针常量和常量指针是不同的概念。1. 指针常量(Pointer to constant):指针本身是一个常量,即指针的值不能被修改,但是它所指向的值可以被修改。声明一个指针常量时,要在指针类型前加上const关键字。示例:```
2023-08-16

简单总结C++中指针常量与常量指针的区别

C++中指针常量与常量指针有以下区别:1. 指针常量(Pointer to constant):指针常量是一个指针,它的值是一个常量,即指针指向的地址不可变。可以修改指针存储的地址,但不能通过指针修改所指向的值。声明指针常量时,常量修饰符c
2023-08-15

C语言中指针常量和常量指针的区别是什么

这篇文章主要介绍了C语言中指针常量和常量指针的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中指针常量和常量指针的区别是什么文章都会有所收获,下面我们一起来看看吧。在面试中我们经常会被面试官问到
2023-06-26

C++常量与指针怎么用

本文小编为大家详细介绍“C++常量与指针怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++常量与指针怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言和指针联用有佷微妙的地方,之前一直佷晕,现在来
2023-06-27

空指针异常怎么解决

空指针异常解决方法:1、使用if语句或三目运算符来检查对象是否为空;2、使用安全调用操作符,可以在调用对象的方法或访问对象的属性之前,先检查对象是否为空;3、使用断言,可以使用assert语句来检查对象是否为空,如果为空,则抛出异常;4、使
空指针异常怎么解决
2023-12-14

eclipse空指针异常如何解决

当程序运行时出现空指针异常,表示某个对象为空,无法调用其方法或访问其属性。解决空指针异常的方法有以下几种:1. 检查空指针异常发生的位置。在出现空指针异常的行代码前后添加日志输出,查看具体是哪个对象为空,以便定位问题。2. 使用条件判断语句
2023-08-19

C++中常见的空指针异常问题解决方案

C++中常见的空指针异常问题解决方案引言:在C++编程中,空指针异常是一种常见的错误类型。当程序试图访问指向空地址的指针时,就会导致空指针异常的发生。在大型项目中,空指针异常可能会导致程序崩溃或产生不可预期的行为。因此,开发人员需要了解如何
2023-10-22

C语言常见的指针笔试题解析

在我们学习指针之后,应该在实际应用中去理解和掌握它,毕竟实践才是检验真理的唯一标准,我们以后在找工作的过程中免不了会遇到与指针相关的试题,本篇文章可以帮助我们提前了解一些常见的指针考点,需要的可以了解一下
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录