将指向 const 的指针或指向 const 的 const 指针声明为形参

2024-04-03

我最近对代码进行了一些调整,其中我必须更改函数中的形式参数。最初,该参数类似于以下内容(注意,该结构之前已进行类型定义):

static MySpecialStructure my_special_structure;
static unsigned char char_being_passed;              // Passed to function elsewhere.
static MySpecialStructure * p_my_special_structure;  // Passed to function elsewhere.

int myFunction (MySpecialStructure * p_structure, unsigned char useful_char)
{
    ...
}

进行更改是因为我可以在编译前定义并初始化 my_special_struct,并且 myFunction 从未更改它的值。这导致了以下变化:

static const MySpecialStructure my_special_structure;
static unsigned char char_being_passed;              // Passed to function elsewhere.
static MySpecialStructure * p_my_special_structure;  // Passed to function elsewhere.

int myFunction (const MySpecialStructure * p_structure, unsigned char useful_char)
{
    ...
}

我还注意到,当我在程序上运行 Lint 时,有多个 Info 818 引用了许多不同的函数。该信息指出“指针参数‘x’(第 253 行)可以声明为指向 const”.

现在,针对上述问题,我有两个问题。首先,对于上面的代码,由于 MySpecialStructure 中的指针和变量在函数内都没有更改,因此将指针也声明为常量是否有益?例如-

int myFunction (const MySpecialStructure * const p_structure, unsigned char useful_char)

我的第二个问题是关于 Lint 信息。如果函数不更改其值,则将指针声明为常量形式参数是否有任何好处或缺点......即使您传递给函数的内容从未声明为常量?例如-

static unsigned char my_char;
static unsigned char * p_my_char;
p_my_char = &my_char;

int myFunction (const unsigned char * p_char)
{
    ...
}

感谢您的帮助!

编辑以澄清 -

申报有什么好处指向const or a const指向const- 作为形式参数?我知道我can这样做,但为什么我想...特别是在传递的指针和它指向的数据未声明为常量的情况下?


将指针声明为 const - 作为形参有什么优点?我知道我可以做到这一点,但为什么我想...特别是在传递的指针和它指向的数据未声明为常量的情况下?

我以为你的意思是一个指向const.

通过有一个指针const作为参数,优点是您可以通过告诉程序员您的函数不会修改指针指向的对象来记录 API。

例如看看memcpy原型:

void *memcpy(void * restrict s1, const void * restrict s2, size_t n);

它告诉程序员所指向的对象s2不会被修改通过memcpy call.

它还提供编译器强制文档,因为如果您将指针从指针修改为指针,则实现将发出诊断信息const.

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

将指向 const 的指针或指向 const 的 const 指针声明为形参 的相关文章

随机推荐

  • Apache Netbeans 10 CVS 插件不可用?

    我最终升级到 Apache Netbeans 10 从 8 2 并想像往常一样使用菜单安装 CVS 插件Tools gt Plugins gt Available Plugins 但是 我似乎无法找到 访问该插件 在 设置 中 我激活了 N
  • JQuery tablesorter pager 插件在 Edge 模式下无法与 IE11 正常工作

    如果您使用带有分页器的 Tablesorter Jquery 插件 则表上的添加将不会显示任何数据 数据就在那里 但它是隐藏的 我怀疑该插件的浏览器功能检测方法无法处理IE11 还有其他人遇到这个吗 看来IE11的userAgent有问题
  • 使用 snmp 代理注册 OID

    我正在尝试使用 snmp4j 模拟 SNMP 代理 我正在尝试向代理注册 MO 下面是代码片段 static final OID mo1 new OID 1 3 6 1 4 1 1234 1 104 static final OID mo2
  • 在 Coq 中,“if then else”允许非布尔第一个参数?

    我读过一些教程if a then b else c代表match a with true gt b false gt c end 然而 很奇怪的是 前者不检查类型a 而后者当然确保a是一个布尔值 例如 Coq lt Check if nil
  • java中的内存文件系统

    我想用Java创建一个简单的内存文件系统 它有一个根目录 并且能够创建新的子目录 在该目录中 我们可以创建新文件 写入文件 读取文件 删除文件以及重命名文件 您能否提供一些从哪里开始的建议 简单的代码或资源 自定义文件系统提供程序必须实现
  • 临时值在此语句结束时被释放[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Select 箱子抓取网页 let document Document from read response unwrap for node in document find Class lia
  • HTML5 视频,如果没有 .ogv 文件,则回退到 Flash

    如果不存在必要的文件类型 如何回退到 Flash 视频播放器 例如这段代码
  • 我可以在为服务器提供 API 的同时提供静态文件吗?

    所以我对网络开发还很陌生 现在我和我更加面向网络的朋友开始了一个项目 他向我扔了各种各样的框架 我们正在做 Vuejs jade stylus 和 jeet 对于新手来说 这当然非常令人困惑 因为没有 Vuejs 示例使用 jade 没有
  • 绘制三角形 iOS

    下面的代码画了一个圆圈 我如何修改现有代码来画一个三角形 colorDotLayer CALayer layer CGFloat width self bounds size width 6 colorDotLayer bounds CGR
  • 为什么我的充电状态接收器总是返回 false?

    我试图检测用户何时插入 或拔出 设备进行充电 在我的接收器中 当我确定它是否已插入时 我总是得到 错误 的状态读数 这是我的代码 在清单中
  • 如何在 shell 中解析长格式参数?

    我所看到的一切都使用getopt或者稍微花哨一点的getopts仅支持单字符选项 例如 h但不是 help 我想做一些花哨的长选择 我做过类似的事情this http blogger ziesemer com 2010 01 dyndns
  • 带有变量的 Swift 闭包导致内存泄漏

    我正在调试我的程序 发现内存泄漏问题 在ViewController中 当它弹出时 应该调用deinit函数 但事实并非如此 所以我尝试通过以下步骤来解决这个问题 通过注释多行 我发现以下几行使得 ViewController 没有释放 v
  • TimeZoneInfo.ConvertTimeToUtc 问题

    我们遇到一个问题 一位开发人员创建了以下代码 并且该代码可以在他的 DEV 环境中运行 但是当它被签入 QA 时 代码会中断并显示以下错误消息 myRecord UTCStartTime TimeZoneInfo ConvertTimeTo
  • 并行下载多个文件,就像 Android 中的 Whats App 一样

    我已经知道使用服务 意图服务我们下载多个文件在背景中 但这个问题还有一个更复杂的问题需要解决 我必须在不同的活动中并行下载多个视频 图像 例如 Whatsapp 我在什么应用程序中看到我们可以开始下载 然后我们可以在不同的屏幕上移动或按主页
  • Sublime Text 如何将包添加到全局存储库

    我为 sublime 创建了一个插件 并将其称为 sublimecastling 主要思想是替换 2 个选定的字段 因此 我很高兴知道是否可以将其添加到您的 Sublime 存储库中 以便用户可以通过包控制安装该插件 下面提供了 githu
  • 无法使用 Angular 服务处理 onbeforeunload 事件

    我有以下回调onbeforeUnload我的一项服务中的事件 在我的app run我有块 window onbeforeunload Services beforeWindowClose 这个方法是在一个服务中 this beforeWin
  • 覆盖 ggplot 中的图例符号大小

    我正在尝试使用我在本论坛和其他地方找到的命令来覆盖我的符号大小 aes 我可以让 Alpha 覆盖起作用 但不能让大小起作用 f1 lt ggplot data d aes x rpos y count group id color id
  • 我不想为我想与之共享 bigquery 数据集的外部用户生成服务帐户 - 这会产生什么影响?

    我向用户的 Google 帐户授予了对我的一个数据集的访问权限 他们正在使用这个 Python 脚本 def query stackoverflow client bigquery Client query job client query
  • 无法正常启动hadoop datanode

    我正在尝试安装 hadoop 2 2 0 在启动 dataenode 服务时遇到以下错误 请帮助我解决此问题 提前致谢 2014 03 11 08 48 16 406 INFO org apache hadoop hdfs server c
  • 将指向 const 的指针或指向 const 的 const 指针声明为形参

    我最近对代码进行了一些调整 其中我必须更改函数中的形式参数 最初 该参数类似于以下内容 注意 该结构之前已进行类型定义 static MySpecialStructure my special structure static unsign