当前位置: 首页 > article >正文

C++中指针常量和常量指针的区别

C++中指针常量和常量指针的区别

前言

在 C/C++ 编程中,指针是一个非常重要的概念,而指针常量和常量指针又是指针的两种特殊形式,它们在实际开发中有着不同的应用场景和语义,理解它们的区别对于编写高质量的代码至关重要。本文将详细介绍指针常量和常量指针的区别,帮助大家更好地掌握这一知识点。

定义

  • 指针常量:指针常量是一个指向某个地址的指针,但这个指针本身不能被修改指向其他地址,即指针的值(地址)是常量。它的定义形式为:数据类型 *const 指针名。例如:int *const ptr = &a;,这里ptr是一个指针常量,它指向变量a的地址,ptr的值不能被修改。
  • 常量指针:常量指针是一个指向常量的指针,即它指向的地址中的值不能被修改,但指针本身可以指向其他地址。它的定义形式为:const 数据类型 *指针名。例如:const int *ptr = &a;,这里ptr是一个常量指针,它指向变量a,但不能通过ptr修改a的值,不过ptr可以被重新赋值指向其他变量。

区别

修饰对象不同

  • 指针常量:修饰的是指针本身,即指针的值(地址)是常量,不能被修改。
  • 常量指针:修饰的是指针所指向的内容,即指针所指向的地址中的值是常量,不能被修改。

使用场景不同

  • 指针常量:当需要一个固定的指针,指向某个地址,且不希望这个指针被修改指向其他地址时,使用指针常量。例如,在函数中需要传递一个指针参数,但不希望这个指针在函数内部被修改指向其他地址,可以使用指针常量作为参数类型。
  • 常量指针:当需要保护指针所指向的数据,防止通过指针修改数据时,使用常量指针。例如,在函数中需要传递一个只读的指针参数,但允许这个指针在函数内部指向其他地址,可以使用常量指针作为参数类型。

示例代码

#include <stdio.h>int main() {int a = 10;int b = 20;// 指针常量int *const ptr1 = &a;// ptr1 = &b; // 错误,指针常量的值不能被修改printf("a = %d\n", *ptr1);// 常量指针const int *ptr2 = &a;printf("a = %d\n", *ptr2);ptr2 = &b; // 正确,常量指针的值可以被修改// *ptr2 = 30; // 错误,不能通过常量指针修改数据printf("b = %d\n", *ptr2);return 0;
}

总结

指针常量和常量指针在定义、修饰对象和使用场景上都有明显的区别。指针常量修饰的是指针本身,常量指针修饰的是指针所指向的内容。在实际编程中,根据具体需求选择合适的指针类型,可以更好地保护数据和防止错误。希望本文的介绍能够帮助大家更好地理解和使用指针常量和常量指针。

相关文章:

C++中指针常量和常量指针的区别

C中指针常量和常量指针的区别 前言 在 C/C 编程中&#xff0c;指针是一个非常重要的概念&#xff0c;而指针常量和常量指针又是指针的两种特殊形式&#xff0c;它们在实际开发中有着不同的应用场景和语义&#xff0c;理解它们的区别对于编写高质量的代码至关重要。本文将详细…...

深入解析向量数据库:基本原理与主流实现

向量数据库&#xff08;Vector Database&#xff09;是专门用于存储和检索高维向量的数据库系统。近年来&#xff0c;随着机器学习和深度学习的发展&#xff0c;文本、图像、音频等非结构化数据常被转换为向量表示&#xff0c;用于语义搜索和推荐等场景。这篇博客将面向 Java/P…...

VectorNet:自动驾驶中的向量魔法

在自动驾驶的世界里&#xff0c;车辆需要像超级英雄一样&#xff0c;拥有“透视眼”和“预知未来”的能力&#xff0c;才能在复杂的交通环境中安全行驶。今天&#xff0c;我们要介绍一个神奇的工具——VectorNet&#xff0c;它就像是给自动驾驶车辆装上了一双智能的眼睛&#x…...

PostgreSQL性能监控双雄:深入解析pg_stat_statements与pg_statsinfo

在PostgreSQL的运维和优化工作中&#xff0c;性能监控工具的选择直接关系到问题定位的效率和数据库的稳定性。今天我们将深入探讨两款核心工具&#xff1a;pg_stat_statements&#xff08;SQL执行统计&#xff09;和pg_statsinfo&#xff08;系统级监控&#xff09;&#xff0c…...

【Linux系列】Linux/Unix 系统中的 CPU 使用率

博客目录 多核处理器时代的 CPU 使用率计算为什么要这样设计&#xff1f; 解读实际案例&#xff1a;268.76%的 CPU 使用率性能分析的意义 相关工具与监控实践1. top 命令2. htop 命令3. mpstat 命令4. sar 命令 实际应用场景容量规划性能调优故障诊断 深入理解&#xff1a;CPU …...

C++语法系列之模板进阶

前言 本次会介绍一下非类型模板参数、模板的特化(特例化)和模板的可变参数&#xff0c;不是最开始学的模板 一、非类型模板参数 字面意思,比如&#xff1a; template<size_t N 10> 或者 template<class T,size_t N 10>比如&#xff1a;静态栈就可以用到&#…...

基于图神经网络的自然语言处理:融合LangGraph与大型概念模型的情感分析实践

在企业数字化转型进程中&#xff0c;非结构化文本数据的处理与分析已成为核心技术挑战。传统自然语言处理方法在处理客户反馈、社交媒体内容和内部文档等复杂数据集时&#xff0c;往往难以有效捕获文本间的深层语义关联和结构化关系。大型概念模型&#xff08;Large Concept Mo…...

R 语言科研绘图 --- 热力图-汇总

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

基于DFT码本的波束方向图生成MATLAB实现

基于DFT码本的波束方向图生成MATLAB实现&#xff0c;包含参数配置、方向图生成和可视化模块&#xff1a; %% 基于DFT码本的波束方向图生成 clc; clear; close all;%% 参数配置 params struct(...N, 8, % 阵元数d, 0.5, % 阵元间距(λ/2)theta_sc…...

vBulletin未认证API方法调用漏洞(CVE-2025-48827)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

解决访问网站提示“405 很抱歉,由于您访问的URL有可能对网站造成安全威胁,您的访问被阻断”问题

一、问题描述 本来前几天都可以正常访问的网站&#xff0c;但是今天当我们访问网站的时候会显示“405 很抱歉&#xff0c;由于您访问的URL有可能对网站造成安全威胁&#xff0c;您的访问被阻断。您的请求ID是&#xff1a;XXXX”&#xff0c;而不能正常的访问网站&#xff0c;如…...

FeignClient发送https请求时的证书验证原理分析

背景 微服务之间存在调用关系&#xff0c;且部署为 SSL 协议时&#xff0c;Feignt 请求报异常&#xff1a; Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find vali…...

UDP组播套接字与URI/URL/URN技术详解

UDP组播套接字基础 Java通过MulticastSocket类提供对UDP组播通信的支持,该机制允许单个数据报同时发送给多个接收者。组播套接字的工作机制与标准DatagramSocket类似,但核心区别在于其基于组播组成员关系的通信模型。 组播组成员管理 创建并绑定组播套接字后,必须调用joi…...

机器学习中的关键术语及其含义

神经元及神经网络 机器学习中的神经网络是一种模仿生物神经网络的结构和功能的数学模型或计算模型。它是指按照一定的规则将多个神经元连接起来的网络。 神经网络是一种运算模型&#xff0c;由大量的节点&#xff08;或称神经元&#xff09;之间相互联接构成。每个节点代表一…...

点云识别模型汇总整理

点云识别模型主要分类&#xff1a; 目前主流的点云识别模型主要分为 基于点直接处理的方法&#xff1a;PointNet、PointNet 、DGCNN、 PointCNN、 Point Transformer、 RandLA-Net、 PointMLP、 PointNeXt &#xff1b;基于体素化的方法&#xff1a;VoxelNet、SECOND、PV-RCN…...

项目更改权限后都被git标记为改变,怎么去除

❗问题描述&#xff1a; 当你修改了项目中的文件权限&#xff08;如使用 chmod 改了可执行权限&#xff09;&#xff0c;Git 会把这些文件标记为“已更改”&#xff0c;即使内容并没有发生任何改变。 ✅ 解决方法&#xff1a; ✅ 方法一&#xff1a;告诉 Git 忽略权限变化&am…...

网络编程1_网络编程引入

为什么需要网络编程&#xff1f; 用户再在浏览器中&#xff0c;打开在线视频资源等等&#xff0c;实质上说通过网络&#xff0c;获取到从网络上传输过来的一个资源。 与打开本地的文件类似&#xff0c;只是这个文件的来源是网络。相比本地资源来说&#xff0c;网络提供了更为…...

【Day38】

DAY 38 Dataset和Dataloader类 对应5. 27作业 知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 作业&#xff1a;了解下cifar数据集&#xff0c;尝试获取其中一张图片 import …...

HTML Day04

Day04 0.引言1. HTML字符实体2. HTML表单2.1 表单标签2.2 表单示例 3. HTML框架4. HTML颜色4.1 16进制表示法4.2 rgba表示法4.3 名称表达法 5. HTML脚本 0.引言 刚刚回顾了前面几篇博客&#xff0c;感觉写的内容倒是很详细&#xff0c;每个知识点都做了说明。但是感觉在知识组织…...

佳能 Canon G3030 Series 打印机信息

基本参数 连接方式&#xff1a;Hi-Speed USB 接口&#xff0c;支持 IEEE802.11n/802.11g/802.11b/802.11a/802.11ac 无线连接&#xff0c;可同时使用 USB 和网络连接。尺寸重量&#xff1a;外观尺寸约为 416337177mm&#xff0c;重量约为 6.0kg。电源规格&#xff1a;AC 100-2…...

云原生安全基石:Kubernetes 核心概念与安全实践指南

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. Kubernetes 架构全景 Kubernetes&#xff08;简称 K8s&#xff09;采用主从架构&#xff0c;由控制平面&#xff08;Control Plane&…...

图像修复的可视化demo代码

做项目的时候需要用到一个windows窗口可视化来展示我们的工作&#xff0c;我们的工作是一个文本指导的人脸图像修复&#xff0c;所以窗口需要包括输入图像&#xff0c;文本指导输入和修复结果&#xff0c;并且提供在输入图像上画mask的功能&#xff0c;使用tkinter来实现&#…...

autodl 安装了多个conda虚拟环境 选择合适虚拟环境的语句

1.conda env list 列出所有虚拟环境 可以看到&#xff0c;我有两个虚拟环境&#xff0c;一个是joygen&#xff0c;一个是base conda activate base 或者 conda activate joygen 激活对应的环境。我选择激活 joygen 环境 然后就可以在joygen环境下进行操作了 base环境也是同理…...

【AI工具应用】使用 trae 实现 word 转成 html

假如我们要实现某个网站的《隐私协议》等静态页面&#xff0c;产品给了一个 word 文档&#xff0c;以前我都是手动从 word 文档复制一行的文字&#xff0c;然后粘贴到一个html文件中&#xff0c;还得自己加各种标签&#xff0c;很麻烦。 我们可以使用 trae 等 ai 工具实现 wor…...

ansible-playbook 进阶 接上一章内容

1.异常中断 做法1&#xff1a;强制正常 编写 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…...

趋势直线指标

趋势直线副图和主图指标&#xff0c;旨在通过技术分析工具帮助交易者识别市场趋势和潜在的买卖点。 副图指标&#xff1a;基于KDJ指标的交易策略 1. RSV值计算&#xff1a; - RSV&#xff08;未成熟随机值&#xff09;反映了当前收盘价在过去一段时间内的相对位置。通过计算当前…...

基线配置管理:为什么它对网络稳定性至关重要

什么是基线配置&#xff08;Baseline Configuration&#xff09; 基线配置&#xff08;Baseline Configuration&#xff09;是经过批准的标准化主设置&#xff0c;代表所有设备应遵循的安全、合规且运行稳定的配置基准&#xff0c;可作为评估变更、偏差或未授权修改的参考基准…...

AWS WebRTC:获取ICE服务地址(part 1)

建立WebRTC连接的第二步是获取ICE服务地址。 ICE全称&#xff1a;Interactive Connectivity Establishment&#xff0c;建立互动连接。 ICE 服务地址&#xff0c;主要是 TURN 和 STUN 服务器的地址&#xff0c;用于 WebRTC 在 NAT 网络环境中协商建立连接。 上代码&#xff…...

Nest全栈到失业(一):Nest基础知识扫盲

Nest 是什么? 问你一个问题,node是不是把js拉出来浏览器环境运行了?当然,他使用了v8引擎加上自己的底层模块从而实现了,在外部编辑处理文件等;然后它使用很多方式来发送请求是吧,你知道的什么http.request 或 https.request; 我们浏览器中,使用AJAX以及封装AJAX和http的Axios…...

摩尔线程S4000国产信创计算卡性能实战——Pytorch转译,多卡P2P通信与MUSA编程

简介 MTT S4000 是基于摩尔线程曲院 GPU 架构打造的全功能元计算卡&#xff0c;为千亿规模大语言模型的训练、微调和推理进行了定制优化&#xff0c;结合先进的图形渲染能力、视频编解码能力和超高清 8K HDR 显示能力&#xff0c;助力人工智能、图形渲染、多媒体、科学计算与物…...