【C/C++】 常量指针,指针常量、指向常量的常指针详解

本文详细介绍了C++中的指针概念,包括指针存储内存地址、指针常量、常量指针和指向常量的指针的区别。同时,还提到了空指针和野指针的使用注意事项,帮助读者全面掌握指针的使用和安全操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是指针

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

数据是存放在内存中的,每一个变量都有一个内存地址,假设是一个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会随机的指向一个地址


请添加图片描述
请添加图片描述

<think>好的,用户想了解AI编程工具DeepSeek。我需要先确认这个工具的具体信息,可能用户听说过但不太清楚细节。首先,我应该回忆一下DeepSeek的相关资料,它是不是国内的一个AI编程助手?记得之前有新闻报道过,由深度求索公司开发,可能对标国外的GitHub Copilot。 接下来,需要整理DeepSeek的主要功能。比如代码生成、补全、调试、跨语言支持等。用户可能想知道它如何帮助编程,提高效率。还要考虑它支持的编程语言,比如Python、Java、JavaScript这些常见的是否都支持。 另外,用户可能关心它的特点,比如是否结合了国内开发者的习惯,有没有本地化优化,或者与其他工具集成的情况。比如支持VS Code、PyCharm这些常用IDE,这对开发者来说很重要。 使用场景部分,可以分点说明,比如辅助新手学习、快速开发项目、处理复杂问题等。这样用户能更清楚自己是否适用。同时,需要提到免费和付费版本,用户可能对价格敏感,但根据公开信息,DeepSeek有免费的基础服务,这一点要准确。 还要注意避免错误信息,比如公司全称是“深度求索(DeepSeek Inc.)”,成立时间2023年,总部杭州。这些细节要准确,不能出错。可能用户会想了解公司的背景,增加信任感。 最后,是否需要比较其他工具,比如GitHub Copilot或通义灵码?但用户没提,可能暂时不需要深入,简单提及即可。总结部分要突出DeepSeek的优势,比如适合国内用户,多场景支持,帮助提升效率。 检查是否符合之前的系统级指令:使用中文,数学公式没问题,结构清晰,分点说明。确保没有使用Markdown,语言口语化,自然流畅。确认信息准确,特别是公司信息和功能点,避免过时内容。</think>DeepSeek(深度求索)是一款由中国团队开发的AI编程工具,专注于通过大模型技术提升开发者的编码效率。以下是关于它的详细介绍: ### 核心功能 1. **代码生成与补全** - 支持根据自然语言描述自动生成代码片段(如:输入“用Python实现快速排序”) - 实时代码补全建议,减少重复性编码 2. **智能调试** - 自动识别代码中的语法/逻辑错误 - 提供修复建议并解释错误原因 3. **跨语言支持** 覆盖Python、Java、JavaScript、C++等主流编程语言 4. **文档辅助** - 自动生成函数注释 - 支持技术文档问答(如:“解释Spring Boot的依赖注入机制”) ### 突出特点 - **本土化优化**:专门针对中文开发者设计,支持中英文混合描述 - **IDE集成**:提供VS Code、JetBrains全家桶等插件 - **私有化部署**:企业版支持本地化部署,保障代码安全 - **多模态交互**:支持代码+文本+流程图混合输入 ### 典型应用场景 1. **新手学习** 通过“代码解释”功能快速理解复杂代码逻辑 2. **敏捷开发** 快速生成基础框架代码(如CRUD接口、测试用例) 3. **复杂问题求解** 辅助算法设计、系统架构优化等专业场景 4. **代码重构** 自动识别冗余代码并提供优化方案 ### 使用方式 - **在线平台**:通过网页直接访问(提供免费基础版) - **IDE插件**:支持VS Code、PyCharm等主流开发环境 - **API服务**:可集成到企业自有系统 ### 技术背景 开发公司深度求索(DeepSeek Inc.)成立于2023年,专注于AGI领域研发,其代码模型基于自研的千亿参数大模型,在HumanEval等权威评测中表现优异。 与其他工具(如GitHub Copilot)相比,DeepSeek的优势在于: - 更贴合中文开发语境 - 对国内常用技术栈(如Spring Boot、MyBatis)支持更深入 - 提供更灵活的私有化部署方案 建议开发者通过实际项目体验其「上下文感知」能力——它能结合项目中的自定义类和方法进行智能推荐,显著提升复杂工程的开发效率。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z小旋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值