c++之const指针

2023-10-29

我们知道,const可以修饰一般的变量,这样的变量我们称之为常变量,常变量的值是不能修改的。

const也可以修饰指针变量,可以指定指针变量是一个常量,或者指定指针变量指向的对象是一个常量。有以下几种情况。

一、指向常量的指针变量

const int *p指针指向int a;

格式为:

const 类型名 * 指针变量名;

#include<iostream>
using namespace std;
int main()
{
	
	int a = 10;
	const int *p = &a;
	//*p = a;//报错,表达式必须是可以修改的左值。
	a = 20;//合法
	cout << a << endl;
	return 0;
}

分析:用指向常量的指针变量只是限制了通过指针变量改变它指向的对象的值,但是可以通过它本身来改变它的值。

指向常量的指针变量一般用处是作为函数参数

二、常指针(常地址)

int * const p指针指向int a;

形式为:

类型名 * const 指针变量名;

#include<iostream>
using namespace std;
int main()
{
	
	int a = 10;
	int b = 10;
	int * const p = &a;
	*p = a;//合法
	//p = &b;报错,表达式必须是可以修改的左值。
	cout << a << endl;
	return 0;
}

说明:

1.这种指针变量称为常指针变量,简称常指针,即指针值(地址)不能改变。

2.必须在定义时初始化,指定其指向(类似于在建立常变量时也必须初始化)

3.指针变量的指向不能改变你,但是指针变量的指向变量的值可以改变

4.注意const和*的位置

常指针一般用处在于c++的引用。c++引用的本质就是常指针

三、指向常量的常指针

const int * const p指针指向int a;

形式为:

const 类型名 * const 指针变量名;

#include<iostream>
using namespace std;
int main()
{
	
	int a = 10;
	int b = 10;
	const int * const p = &a;
	//*p = a;//报错,表达式必须是可以修改的左值。
	//p = &b;//报错,表达式必须是可以修改的左值。
	a = 100;//合法
	cout << a << endl;
	return 0;
}

四、其他情况

int *p指针指向const int a(报错)

#include <iostream>
using namespace std;
int main()
{
	const int  a = 10;
	//int *p = &a;//报错,const int不能用于初始化int *
	return 0;
}

const int *p指针指向const int a

#include <iostream>
using namespace std;
int main()
{
	const int  a = 10;
	const int b = 20;
	const int *p=&a;
	//*p = 100;//报错,表达式必须是可修改的左值
	//a = 100;//报错,表达式必须是可修改的左值
	p = &b;//合法
	cout << *p << endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++之const指针 的相关文章

  • 实体框架一对多关系

    我的 EF 查询大约需要 3 秒才能获取 10 个玩家 因为它获取另一个表的所有 500k 行 而不是我需要的少数行 这是玩家实体 namespace RocketLeagueStats Database Entities Table pl
  • 是否有与 SQL Server newsequentialid() 等效的 .NET

    我们使用 GUID 作为主键 您知道默认情况下它是集群的 将新行插入表中时 它将插入表中的随机页 因为 GUID 是随机的 这会对性能产生可衡量的影响 因为数据库始终会分割数据页 碎片 但我使用顺序 GUID 的主要原因是因为我希望将新行插
  • Microsoft Visual C++ 2008 和 R2007b 的 Mex 类型

    我想对 vs2008 和 matlab2007b 使用 mex 类型 我尝试了下面的代码 include
  • 将整数四舍五入到最接近的 10 倍数[重复]

    这个问题在这里已经有答案了 我想弄清楚如何对价格进行四舍五入 双向 例如 Round down 43 becomes 40 143 becomes 140 1433 becomes 1430 Round up 43 becomes 50 1
  • CRTP 能否完全取代小型设计的虚拟功能?

    Is CRTP http en wikipedia org wiki Curiously recurring template pattern有足够的能力智胜virtual功能齐全 我认为 CRTP 的唯一缺点是为每个重复模式生成大量代码
  • 从 proc/pid/cmdline 解析命令行参数

    我正在尝试解析命令行参数另一个程序 这是一个模拟器 在我的程序中使用system 命令和模拟器的pid 不幸的是同时使用文件读取和cat 输出格式不正确 所以我无法真正获取数据 cat在命令行上显示删除了空格的文件内容 整个字符串粘在一起
  • 相当于一个允许重复键的排序字典

    我需要一个数据结构 可以通过与对象关联的浮动键对对象进行排序 从低到低的在前 问题是键代表成本 所以经常有重复 我不关心这一点 因为如果两个具有相同的成本 我只会抓住第一个 因为它没有区别 问题是编译器抱怨 是否有一种数据结构的行为方式相同
  • ASP.NET Core 测试 - 没有方法 'public static IHostBuilder CreateHostBuilder(string[] args)

    我正在尝试在测试中设置我的应用程序并在中使用Startup s Configure method context Database EnsureCreated 并期待着Sqlite文件出现在Test sbin文件夹 这是我的代码 using
  • EntityFramework:“参数值超出范围。”

    我在 EntityFramework 模型优先 中保存小数时遇到问题 在我的 EDMX 中 我声明我的属性为 Decimal 30 10 然后我尝试保存该数字 1215867935736100000 结果是 Parameter value
  • 如何测试 PARTIAL 视图在 C# ASP .NET MVC 中呈现

    我有一个视图 它内部有部分视图渲染 div class partialViewDiv Html RenderPartial partial Model SomeModelProperty div 和一个返回此视图的控制器 public Ac
  • 使用正在运行的进程的共享内存收集核心转储

    核心转储仅收集进程空间 而不收集为进程间通信创建的共享内存 如何使核心转储也包含正在运行的进程的共享内存 设置核心文件过滤器 proc PID coredump filter per http man7 org linux man page
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • 如何使用实体框架更新特定记录的一个字段?

    我想要更新一个名叫 Pejman 的人的家庭情况 这是我的对象类 public class Person public int Id get set public string FirstName get set public string
  • invoke_result获取模板成员函数的返回类型

    如何获取模板成员函数的结果类型 下面的最小示例说明了该问题 include
  • 从 WMI 运行 exe 时的网络身份验证

    我有一个 C exe 需要使用 WMI 运行并访问网络共享 但是 当我访问共享时 我收到 UnauthorizedAccessException 如果我直接运行 exe 则可以访问共享 我在这两种情况下都使用相同的用户帐户 我的应用程序有两
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • C/C++ 特殊 CPU 功能的使用

    我很好奇 新的编译器是否使用了新 CPU 中内置的一些额外功能 例如 MMX SSE 3DNow 所以 我的意思是 在最初的 8086 中甚至没有 FPU 所以旧的编译器甚至不能使用它 但新的编译器可以 因为 FPU 是每个新 CPU 的一
  • 使用 STL 迭代器而不初始化它

    我想做这样的事情 container iterator it NULL switch eSomeEnum case Container1 it vecContainer1 begin break case Container2 it vec
  • 有没有 C# 到 C 的转换工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道 C 与 NET Framework 不同 C 是一种符合 ECMA ECMA 334 和 ISO

随机推荐

  • Qt Creator增强套装16.9.27.12更新

    HI 大家好 这里是jiangcaiyang 我们很高兴地告诉大家 我们将要发布Qt Creator增强套装新的版本了 这一次呢 主要是应大家强烈的要求 更新了我们的聊天神器 萌梦聊天室 现在它不再频繁地崩溃以及暂时性地无法回消息了 这个聊
  • docker安装seata

    下载seata docker镜像 docker pull seataio seata server 1 4 2 创建挂载目录和文件 mkdir p opt docker seata conf touch opt docker seata c
  • 创建老版本react-native项目,以0.59.10为例(0.60.0之前的版本)

    目录 创建react native 0 59 10版本项目前言 开始创建react native 0 59 10版本 创建react native 0 59 10版本项目前言 写这篇文章之前 有些东西要说明一下 当前rn的最新版本为 0 7
  • JavaFx转换为exe

    要点 首先导入依赖 在pom xml导入依赖 具体解释 而maven的两种方式 前者生成两个文件 程序jar包与复制所需的依赖jar包到lib目录 操作比较繁琐 而且在exe4j中进行打包的话会出现Caused by java lang N
  • JS基础知识(二十八):箭头函数

    1 箭头函数的使用 箭头函数有两种格式 一种只包含一个表达式 没有 和 return 一种包含多条语句 这个时候 return 就不能省略 箭头函数类型 代码 没有参数 gt 100 function return 10 一个参数 x gt
  • 使用Initramfs挂载根文件系统,编译过程multiple target patterns(多个目标匹配)问题的解决

    编译内核前 配置内核用Initramfs挂载根文件系统 配置选项如下 Genera setup gt Initial RAM filesystem and RAM disk initramfs initrd support home myr
  • 想要精通算法和SQL的成长之路 - 戳气球

    想要精通算法和SQL的成长之路 戳气球 前言 一 戳气球 1 1 记忆化搜索 前言 想要精通算法和SQL的成长之路 系列导航 一 戳气球 原题链接 首先我们看一下题干 对于超出了数组边界的 就当做它是一个数字为1的气球 遇到这种的 我们可以
  • POI设置EXCEL单元格的"条件格式"

    这篇博客主要是说明如何通过POI设置excle文档中单元格的条件格式 POI版本 poi 3 5 FINAL 涉及到的主要类 org apache poi hssf usermodel HSSFSheet org apache poi hs
  • SAN 网络配置规范

    管理网络的界定 为了统一起见 我们对管理网络进行如下界定 1 管理网络是指专门开辟一个用于管理的网络 主要用于 SAN 网 络设备的管理和调试 SAN 存储设备的管理和调试等 包括 BNA SAN 网络管理系统均使用管理网络 地址段为 X
  • Error when import grpc: "Symbol not found: _deflate"解决方法

    Import grpc时出现如下错误 Traceback most recent call last File private var tmp bazel lls 5ea0bb16383fa9c06c47b535a23ac475 execr
  • mybatis—plus

    接口和实现类都继承 如果你让你的服务接口继承 IService 并让你的服务实现类继承 ServiceImpl 那么你的服务接口将明确地列出所有可用的 CRUD 方法 只继承 ServiceImpl 如果你只让你的服务实现类继承 Servi
  • 【改进算法】【IHAOAVOA】天鹰优化算法和非洲秃鹫混合优化算法

    目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现 IHAOAVOA An improved hybrid aquila optimizer and African vultures optimizati
  • 深入理解Java并发之synchronized实现原理

    线程安全是并发编程中的重要关注点 应该注意到的是 造成线程安全问题的主要诱因有两点 一是存在共享数据 也称临界资源 二是存在多条线程共同操作共享数据 因此为了解决这个问题 我们可能需要这样一个方案 当存在多个线程操作共享数据时 需要保证同一
  • 【运维知识进阶篇】Ansible实现一套完整LNMP架构

    前面介绍了PlayBook怎么写服务部署 把服务部署上后 我们来用Ansible来部署项目 实现一套完整的LNMP架构 我们部署wordpress wecenter phpshe phpmyadmin这四个项目 将其所有的剧本都写入lnmp
  • python第二阶段(14)numpy入门基础-可视化之折线图

    numpy入门基础 可视化之折线图 1 numpy的折线图plot date函数 2 示例 1 简单的示例 2 股票时间序列图 演示 1 numpy的折线图plot date函数 折线图 折线图是用直线段将各数据连接起来组成的图形 常用来观
  • 【自我解析】2020华为杯数学建模比赛C题

    C题相较于A题专业性不是那么强 更偏向对给出数据的处理 这里我看了三篇优秀论文进行此题的学习 分别为0319 同济 0034 上海理工 0095 上海交通 题目提供两个数据附件 P300的介绍 睡眠过程 问题一 0319对于问题一的分析 0
  • opencv 人脸识别 (二)训练和识别

    上一篇中我们对训练数据做了一些预处理 检测出人脸并保存在 pic color x文件夹下 x 1 2 3 类别号 本文做训练和识别 为了识别 首先将人脸训练数据 转为灰度 对齐 归一化 再放入分类器 EigenFaceRecognizer
  • VUE实现v-for循环遍历图片方法

    写项目时 遇到后台无法提供背景图片 需要自己在本地循环遍历到页面上 并和后台数据一起展示的需求 解决方法如下 resourceList是后台传过来的数组对象 我们需要展示它的name 同时 在本地把图片按以下方式命名 使用 src动态获取图
  • react+antd select下拉框实现模糊搜索匹配

    我们在开发过程中 经常会出现下拉框数据很多得情况 这个时候客户一个个得找就很浪费时间 那该怎么办呢 我们可以实现一边输入一遍模糊匹配 实现后的效果是 具体代码实现请看下面 我们可以在Select Option 里面返回我们想要搜索得字段 然
  • c++之const指针

    我们知道 const可以修饰一般的变量 这样的变量我们称之为常变量 常变量的值是不能修改的 const也可以修饰指针变量 可以指定指针变量是一个常量 或者指定指针变量指向的对象是一个常量 有以下几种情况 一 指向常量的指针变量 const