关于使用指针修改 const 变量的混乱

2023-12-23

以下示例使我的理解更加混乱。我无法理解如何修改本地 const 变量。请帮助我理解同样的事情。

 /* Compile code without optimization option */
 // volatile.c
 #include <stdio.h>
 int main(void)
 {
     const int local = 10;
     int *ptr = (int*) &local;

     printf("Initial value of local : %d \n", local);

     *ptr = 100;

     printf("Modified value of local: %d \n", local);

     return 0;
}

$ gcc 易失性.c -o 易失性 –保存临时文件

$ ./不稳定

本地初始值:10

local的修改值:100


这简直就是未定义的行为 https://en.wikipedia.org/wiki/Undefined_behavior如果我们看一下 C99 草案标准部分6.7.3 类型限定符段落4它说:

If an attempt is made to modify an object defined with a const-qualified type through use of an lvalue with non-const-qualified type, the behavior is undefined. If an attempt is made to refer to an object defined with a volatile-qualified type through use of an lvalue with non-volatile-qualified type, the behavior is undefined.115)

所以你不能对结果有任何期望,你不应该这样做。

如果我们看一段2它说:

The properties associated with qualified types are meaningful only for expressions that are lvalues.114)

和脚注114 says:

该实现可以将一个非易失性的 const 对象放置在只读区域中 贮存。此外,如果从未使用过此类对象的地址,则实现不需要为其分配存储空间。

一般来说,实施不必使const变量只读但可能会,但正如 R.. 指出的那样,将自动变量放入只读存储器中会很困难。

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

关于使用指针修改 const 变量的混乱 的相关文章

  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 为什么从字典中获取时会得到 Action<> 的克隆?

    我有以下字典 private Dictionary
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 运行时的 Java 编译器

    在我当前的项目中 我需要在运行时编译java代码 在后台处理用户的输入 这与类路径中的tools jar 配合得很好 但是 并非我的程序的所有用户都在其系统上安装了 JDK 其中一些只有 JRE 在这种情况下 运行时没有可用的 java 编
  • 使用Holoviews,如何设置标题?

    我一直在尝试在使用 Holoviews 和 Bokeh 时设置标题 我将 3 个图相互叠加 代码如下所示 opts Curve width 900 height 400 show grid True tools hover finalize
  • 如何删除 d3.behavior.drag().on("drag",...) 事件处理程序[重复]

    这个问题在这里已经有答案了 我将以下内容附加到 svg 元素 var dragger d3 behavior drag origin function d return d on drag this move on dragend drop
  • 选择要从中选择的表,取决于已给定表的列值

    为了我的目的 我必须选择一个表来根据已给定表的列值选择列 首先 我考虑了 CASE 构造 如果 sqlite 可以实现的话 SELECT FROM CASE IF myTable column1 value1 THEN SELECT FRO
  • 如何获取可执行文件的版本?

    萨尔维特 我正在编写一个 vb net 程序来更新我的应用程序的自述文件 我想从其他编译的应用程序中提取版本号 我想从可执行文件中读取版本号 而不是从其未编译的资源中读取版本号 如何在 vb net 中执行此操作而不使用像 reshacke
  • 除了锁定的对象之外,我还可以将对象更改保存到另一个 TR 中吗?

    当我尝试切换到报告源的编辑模式时 会出现一个弹出窗口告诉我 将为用户XXX的以下请求创建一个新任务 还提出了运输请求 但是 我不想在此请求中保存我的更改 而是在另一个现有请求中保存更改 我不知道我的系统中正在实施任何版本控制系统 也不知道如
  • iOS ClipsToBounds YES 和 Shadow?

    我有一个浮动的 UITableView 有圆角和设定的高度 但我也想添加阴影 但我的问题是我需要clipsToBounds打开 这样我的单元格就不会超出浮动的 UITableView 是否有办法在为 UITableView 保持 Clips
  • 使用 androidx DialogFragment 创建 AlertDialog 时按钮样式错误

    这是我的根风格
  • Firefox 3 书签中的 Http Auth

    我正在尝试创建一个书签 用于将 del icio us 书签发布到单独的帐户 我从命令行测试了它 例如 wget O no check certificate https seconduser email protected cdn cgi
  • 如何将 Jaeger 与 Spring WebFlux 结合使用?

    我们正在尝试与 Webflux 进行反应 我们将 Jaegar 与 Istio 结合使用来实现检测目的 Jaeger 很好地理解 Spring MVC 端点 但似乎根本不适用于 WebFlux 我正在寻找让我的 webflux 端点出现在
  • 将变量传递给 R 中的 WinBugs 模型

    我正在使用 R2WinBugs 包 我想将之前在 R 脚本中计算的两个参数传递给模型函数 c0yy lt 0 1 syy lt 0 0001 Model model lt function c0yy syy Likelihood for i
  • 如何使用 rspec 测试路由约束

    我正在开发一个主要用作 API 的应用程序 除了一些次要视图 例如会话 注册 这将是 标准 我喜欢最终确定的方法Railscast 350 API 版本控制 http railscasts com episodes 350 rest api
  • JPA/Hibernate 选择查询返回重复记录

    我有一个表 例如 Instrument 其中包含 ID State 和 User ID 作为列 所以我有这个 JPA 查询来返回所有具有匹配的仪器记录 用户身份 query manager createQuery SELECT instru
  • 在 matplotlib 轴上设置科学限制后调整指数文本

    目前 如果我将 matplotlib y 轴刻度标签设置为科学模式 它会在表单 y 轴顶部给出一个指数1e 5 我想调整这个来阅读r mathregular 10 5 这样就可以很好地打印出来 这是我的示例代码 Create a figur
  • jshell 启动时加载脚本的不同方法

    根据文档 还有在启动时加载脚本的选项 包括一些特殊的预定义选项 这些是使用 startup 标志指定的 传入文件名或以下之一 DEFAULT 加载默认行为 这与根本没有指定的行为相同 JAVASE 默认导入所有 Java SE 包 PRIN
  • FormBuilder 控件导致“表达式在检查后已更改”异常

    我有一个正在通过编程方式实例化的表单DynamicComponentLoader loadIntoLocation 表单代码如下 constructor private builder FormBuilder this editForm b
  • 如何使用log4j2(xml中的MDC)将不同的日志写入不同的文件中?

    现在我使用这样的结构 附加器
  • iOS:多个启动图像

    是否可以提供多个启动图像 而不是仅提供一个 Default png 启动图像 我的目标是 例如 您有 5 个不同的启动图像 并且对于每个应用程序启动 它都会显示另一个启动图像 以防万一有人对此做出回应 我知道对于不同的配置 例如屏幕方向 可
  • 如何在两个视图之间生成离线差异输出?

    我正在分析 Clearcase 中两个视图之间的不同文件 我需要生成输出 以便我可以在没有互联网连接的情况下完成此任务 我想要的是运行一个命令 递归地遍历每个视图 并为从视图 A 到视图 B 的每次更改生成一个合并 差异输出文件 这可以像合
  • 关于使用指针修改 const 变量的混乱

    以下示例使我的理解更加混乱 我无法理解如何修改本地 const 变量 请帮助我理解同样的事情 Compile code without optimization option volatile c include