const int*、const int * const 和 int const * 之间有什么区别?

2023-11-22

我总是搞乱如何使用const int*, const int * const, and int const *正确。是否有一套规则来定义你可以做什么和不能做什么?

我想知道在分配、传递给函数等方面所有该做和不该做的事情。


向后阅读(由顺时针/螺旋规则):

  • int*- 指向 int 的指针
  • int const *- 指向 const int 的指针
  • int * const- 指向 int 的 const 指针
  • int const * const- 指向 const int 的 const 指针

现在第一个const可以位于类型的任一侧,因此:

  • const int * == int const *
  • const int * const == int const * const

如果你想变得真正疯狂,你可以这样做:

  • int **- 指向 int 指针的指针
  • int ** const- 指向 int 指针的 const 指针
  • int * const *- 指向 const 指针的指针,该指针指向 int
  • int const **- 指向 const int 的指针
  • int * const * const- 指向 int 的 const 指针的 const 指针
  • ...

如果您不确定,可以使用类似的工具cdecl+自动将声明转换为散文。

为了确保我们清楚的含义const:

int a = 5, b = 10, c = 15;

const int* foo;     // pointer to constant int.
foo = &a;           // assignment to where foo points to.

/* dummy statement*/
*foo = 6;           // the value of a can´t get changed through the pointer.

foo = &b;           // the pointer foo can be changed.



int *const bar = &c;  // constant pointer to int 
                      // note, you actually need to set the pointer 
                      // here because you can't change it later ;)

*bar = 16;            // the value of c can be changed through the pointer.    

/* dummy statement*/
bar = &a;             // not possible because bar is a constant pointer.           

foo是一个指向常量整数的变量指针。这使您可以更改所指向的内容,但不能更改所指向的值。最常见的是 C 风格的字符串,其中有一个指向const char。您可以更改指向的字符串,但无法更改这些字符串的内容。当字符串本身位于程序的数据段中且不应更改时,这一点很重要。

bar是指向可以更改的值的常量或固定指针。这就像没有额外语法糖的参考。因此,通常您会在使用引用的地方使用引用T* const指针,除非你需要允许NULL指针。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

const int*、const int * const 和 int const * 之间有什么区别? 的相关文章

  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData

随机推荐

  • 如何在 Web 应用程序中管理自定义字体 (system.drawing)

    我有一个应用程序将文本写入图像 using System Drawing C 我正在使用特定的字体来做到这一点 由于我不能依赖共享托管服务器来获取我可能需要的所有自定义字体 并且字体列表可能会增长 因此如何管理用于我的应用程序的字体 我可以
  • fork()执行过程

    fork 究竟是如何工作的 下面的代码 include
  • 自动修复 Sonar 发现的问题

    我正在修复一个非常古老的 Java 项目 大约有 8 年历史 中声纳捕获的问题 这是一个巨大的项目 有很多被声纳捕获的错误代码 虽然它们是非常琐碎的修复 但它们有很多 有没有办法自动修复一系列类似的问题 就像我有大约 1200 个 语句应该
  • Kiosk软件指导

    我需要开发一个信息亭系统 唯一的付款方式是信用卡 借记卡 信息亭需要与另一台 PC 联网 例如 如果顾客在自助服务终端上订购了商品 则需要将其发送到另一台电脑 商店员工可以在其中查看订购的商品 以下是我的以下解决方案 选项 1 基于网络的应
  • 没有越狱检测

    我正在尝试制作一个仅适用于越狱 iDevices 的应用程序 我已经有越狱检测代码 UIApplication sharedApplication canOpenURL NSURL URLWithString cydia UIAlertVi
  • WCF 中带有接口类型参数的通用返回类型

    如何从泛型类型参数中返回接口类型OperationContracts在我的 WCF REST 服务中 更具体地说 它适用于一个操作 但当我使用通用添加第二个操作时则不起作用T那是一个接口 我使用 JSON 作为请求和响应格式 向非 WCF
  • simple_salesforce python 中的父子关系查询,从有序字典中提取

    我正在尝试使用以下命令从 salesforce 查询信息simple salesforce包在Python中 问题在于 它将作为父子关系一部分的字段嵌套到有序字典中的有序字典中 我想 从 Opportunity 对象中找到 id 以及与该记
  • 如何在 Android 6.0 (API 23) 中继续使用浏览器书签更改

    在我的应用程序中 我一直在使用其中一些功能 这些功能将作为unknown使用 Android 6 0 时 buildToolsVersion 23 0 1 其功能为 Browser getAllVisitedUrls getContentR
  • 从中心项目启动我的 RecyclerView Horizo​​ntal Carousel

    我正在创建一个水平 RecyclerView 轮播 并从 RecyclerView 的第一个项目开始缩放焦点项目 自定义CenterZoomLayoutManager的代码 public class CenterZoomLayoutMana
  • 计算 Django 模板中两个日期之间的天数

    我有两个日期 想要显示一条消息 例如 距离试用期结束还剩 n 天 在哪里n是两个给定日期之间的天数 在视图内执行此操作是否更好 或者是否有一种快速方法在模板本身内执行此操作 Use 次以来模板标签
  • SQLAlchemy 和标量值[重复]

    这个问题在这里已经有答案了 我有一个关于 SQLAlchemy 的简单问题 是否可以从结果中获取行作为标量而不是元组 换句话说 我想要一个相当于 i 0 for i in self archive query IRTerm term dis
  • NSOrderedSet 和 SwiftUI ForEach

    我正在尝试使用 CoreData 和 SwiftUI 并有两个实体 狗与行 Dog 之间是一对多的关系 public class Dog NSManagedObject Identifiable NSManaged public var n
  • C# 是否可以在调整频率的同时产生恒定的声音?

    是否有可能在 C 中生成恒定的声音并在声音发出时控制其频率 我尝试过这样的事情 for int i 500 i lt 15000 i 1 Console Beep i 500 但由于是同步的 循环会等待每次蜂鸣声结束 所以我尝试了这个 fo
  • TypeScript 中 type[] 和 [type] 的区别

    假设我们有两个接口 interface WithStringArray1 property string interface WithStringArray2 property string 让我们声明这些类型的一些变量 let type1
  • VS Code 扩展 - 如何将 WebviewPanel 添加到侧边栏?

    根据这一页网络视图可以 在侧边栏或面板区域中呈现 这些示例展示了如何呈现为编辑器面板 vscode window createWebviewPanel catCoding Identifies the type of the webview
  • 如何在 PHP 中将数据的十六进制表示形式转换为二进制数据?

    我熟悉php的功能bin2hex 用于将二进制数据转换为其十六进制表示形式 但是 将数据的十六进制表示形式转换回二进制数据的补码函数是什么 例如 foo hello foo bin2hex foo echo foo Displays 686
  • 如何仅将 git 存储库的子目录部署/推送到 Heroku?

    我有一个项目使用Serve并使用 Git 进行版本控制 服务创建一个output包含我想要部署到 Heroku 的静态文件的文件夹 我不想部署 Serve 项目本身 因为 Heroku Cedar 堆栈似乎不太喜欢它 但最重要的是我想利用
  • Windows Phone 8 更改强调色和主题颜色

    我正在为 Windows Phone 8 创建一个应用程序 并且我想更改主题颜色 而不管用户在手机操作系统中设置的主题如何 就像其他应用程序 例如 Skype 执行此操作一样 到目前为止 我只能通过访问 XAML 中的 LayoutRoot
  • 与 C++ 编码标准相关的过早优化和过早悲观化

    赫伯 萨特的C 编码标准说要避免Premature optimization and Premature pessimization 但我觉得两者都在做同样的事情 因此 希望有人帮助澄清这两个概念及其之间的区别 如果你能举出一些例子 对其他
  • const int*、const int * const 和 int const * 之间有什么区别?

    我总是搞乱如何使用const int const int const and int const 正确 是否有一套规则来定义你可以做什么和不能做什么 我想知道在分配 传递给函数等方面所有该做和不该做的事情 向后阅读 由顺时针 螺旋规则 in