C++ 从 const int* 到 int* 的转换会产生意想不到的结果[重复]

2024-02-12

在c++中,我们知道我们不能将const int*转换为int*。但我有一个代码片段,可以将 const int* 转换为 int*。我是 C++ 的初学者,我在 google 上搜索了这个,但我刚刚得到了提到 const int* 无法转换为 int* 以避免 const 违规的链接。我无法弄清楚为什么它编译时没有错误

#include <iostream>
using namespace std;

int main(void)
{
    const int a1 = 40;
    const int* b1 = &a1;
    int* c1 = (int *)(b1);
    *c1 = 43;
    cout<< c1<<" "<< &a1<<endl;
    cout<< *c1<<" "<< a1<<endl;
 }

另外,问题是上述程序的输出是:

0x7fff5476db8c 0x7fff5476db8c
43 40

有人可以解释一下 c1 整数指针指向 a1 的相同地址,但分别具有不同的值 43 和 40 。


在 C++ 中,对象要么是 const,要么不是。如果它是 const ,则任何修改它的尝试都会调用未定义的行为。这就是你所做的。在那时候anything可以发生。如果你幸运的话,它会崩溃。如果您不那么幸运,它会正常工作,直到您的代码到达客户手中,并造成最大可能的损害。

在 C++ 中,您可以轻松地将 const int* 转换为 int*。你刚刚做到了。然而,“const int*”和“int*”并不意味着所指向的东西是否是const。它只是意味着编译器不会让您在一种情况下进行分配,而会让您在另一种情况下进行分配。*c1 is const。将指针投射到int*并没有改变它的事实const。未定义的行为。

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

C++ 从 const int* 到 int* 的转换会产生意想不到的结果[重复] 的相关文章

  • 如何检查两个变量是否指向内存中的同一个对象?

    例如 struct Foo lt a gt bar a str fn main let foo instance Foo bar bar let some vector Vec lt Foo gt vec foo instance asse
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • 函数的不明确的引用/值版本

    考虑以下函数原型 void Remove SomeContainer Vec const std size t Index SomeContainer Remove SomeContainer Vec const std size t In
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • 如何自定义 ASP.Net Core 模型绑定错误?

    我只想从我的 Web API Asp net Core 2 1 返回标准化的错误响应 但我似乎不知道如何处理模型绑定错误 该项目刚刚从 ASP NET Core Web 应用程序 gt API 模板创建 我有一个简单的操作定义为 Route
  • std::async 参数的生命周期是多少?

    看来函数的参数是通过std async分享未来的生活 include
  • 是否返回 std::move (x)?

    Are std vector
  • 对无符号 8 位整数进行左移操作 [重复]

    这个问题在这里已经有答案了 我试图理解 C C 中的移位运算符 但它们给我带来了困难 我有一个无符号 8 位整数 初始化为一个值 例如 1 uint8 t x 1 根据我的理解 它在内存中的表示方式如下 0 0 0 0 0 0 0 1 现在
  • memccpy 返回比 src 起始地址更低的内存地址

    我有一个学校项目 我必须重新编码memccpy 功能 我使用 2 个程序来检查我的代码是否正常工作 第一个是只有一个主程序的小程序 第二个程序是另一个学生开发的 可以找到here https github com yyang42 mouli
  • Math.Sin、Math.Cos 和 Math.Tan 精度以及正确显示它们的方法

    我正在用 C 编写一个计算器 textBoxResult是一个文本框 我在其中显示数字 recount是以度为单位获取角度并以弧度为单位返回的函数 我的角度是从texBoxInput public double recount int nu
  • 为什么Windsor只能拦截虚方法或接口方法?

    我正在阅读文档 发现如果不使用接口 那么 Windsor 只能拦截虚拟方法 这是 Windsor 的限制还是 C 语言的限制 我正在寻找深入的答案 C 语言在这里完全无关 问题是拦截在运行时级别如何工作 一种技术是从类继承 实现接口并将其用
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • PARITY_NONE 是 C++ Windows 中的关键字吗?

    我正在使用 boost 编写一个串行库 并且我有一个枚举 enum parity t PARITY NONE PARITY ODD PARITY EVEN 我收到如下错误 错误 1 错误 C2059 语法错误 我无法弄清楚问题是什么 然后我
  • C 中函数“fgets”的参数太少

    每当我编译这个错误时 我都会收到该错误 但我不知道为什么 我直接从书上抄袭这个 有人可以帮忙吗 include
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • 列出 J 中数字的数字

    我使用的编程语言 J 我想将一个数字的所有数字放入一个列表中 From 12345 to 1 2 3 4 5 我能做些什么 我写这个的方式是 10 1 我们可以看到它与这句话的使用 10 1 123456789 1 2 3 4 5 6 7
  • 应用非限定名称查找而不是依赖于参数的名称查找

    考虑标准 sec 3 4 1 3 中的一个示例 typedef int f namespace N struct A friend void f A operator int void g A a int i f a f is the ty
  • ASP.NET API:尚未为此 DbContext 配置数据库提供程序

    我正在尝试从我的 Net Core API 项目连接到 MySql 数据库 这是我的上下文类 public class MyContext DbContext public MyContext public MyContext DbCont
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr

随机推荐

  • 单个应用程序中的多个 RCTRootView

    我正在创建一个 React Native 应用程序 但我需要使用 Objective C 来构建我的自定义 UIView 但问题是这个 UIView 需要显示反应内容 例如反应文本输入和按钮 我正在考虑向自定义 UIView 添加 RCTR
  • 位图.保存“一般错误”

    当我运行我的应用程序时 出现以下错误 GDI 中发生一般错误 我环顾四周 发现人们也有类似的错误 但没有找到真正的解决方案 或者实施起来确实很痛苦 那些没有得到解决方案的人还没有发布他们的代码 所以我想我不妨尝试一下并提出另一个关于如何修复
  • @login_required 正在丢失当前指定的语言

    我在用i18n patterns使我的应用程序国际化并且它正在工作 除非我单击需要登录的链接 受保护的视图 login required装饰器 我被重定向到默认语言的登录表单 而不是当前活动的语言 如何保留活动 URL 换句话说 当在法语部
  • rawQuery(查询,选择参数)

    我想使用选择查询从表中检索数据 我已经发现 rawQuery query selectionArgs 的方法SQLiteDatabase类来检索数据 但我不知道如何query and selectionArgs应该传递给rawQuery m
  • 你能从 sklearn 网格搜索 (GridSearchCV) 中获得所有估计器吗?

    我最近使用测试了许多超参数组合sklearn model selection GridSearchCV 我想知道是否有一种方法可以调用在此过程中接受过培训的所有先前估算器 search GridSearchCV estimator my e
  • 分布式缓存

    我正在 opensuse linux 上使用 hadoop 19 我没有使用任何集群 而是在我的机器本身上运行我的 hadoop 代码 我遵循放入分布式缓存的标准技术 但我不是一次又一次地从分布式缓存访问文件 而是将文件的内容存储在一个数组
  • 如何知道 C 函数 free 是否正常工作?

    我发现以下代码的结果存在一些差异 include
  • 为什么Java中没有AtomicBoolean数组数据类型?

    我注意到有NOJava 中的 AtomicBooleanArray 数据类型类似于 AtomicIntegerArray 虽然我可以使用 AtomicBoolean 来满足当前的需求 但我很想了解为什么 AtomicBooleanArray
  • 如何在 JavaScript 中记录返回

    我正在为浏览器应用程序的工作项目编写自己的库 并且在决定如何注释代码时遇到同样的老问题 我正在尝试遵循JsDoc https code google com p jsdoc toolkit w list语法 但可能会继续谷歌闭包编译器 ht
  • 仅使用 CSS 交叉淡入淡出多个背景图像 - 单页面设计

    我正在使用多个 div 构建一个响应式单页网站 这些 div 可缩放到用户浏览器的高度和宽度 我想让多个背景图像在网站上的一个 div 内无限循环地交叉淡入淡出 我尝试按照本教程进行操作 http css3 bradshawenterpri
  • 从 Android Activity 绑定到服务

    我有一个启动服务的活动 当活动关闭时 我希望服务继续在后台运行 我在这里有几个问题 关闭活动屏幕会导致活动实际停止吗 还是我需要强行阻止它才能停止 如果关闭屏幕确实导致它停止 那么我认为我需要使用startService开始它 那是对的吗
  • 如何禁用 bootstrap-datetimepicker-master 中的特定日期?

    datepicker datetimepicker format MM dd hh ii P startDate 2016 08 19 10 00 daysOfWeekDisabled 1 2 3 4 5 autoclose true 如何
  • WSDL 中的 有什么区别?

    Both
  • 为什么 64 位比 32 位更快?

    我一直在进行一些性能测试 主要是为了了解迭代器和简单 for 循环之间的区别 作为其中的一部分 我创建了一组简单的测试 然后对结果感到非常惊讶 对于某些方法 64 位比 32 位快近 10 倍 我正在寻找的是对为什么会发生这种情况的一些解释
  • 通过 Oracle SQL 查询拆分行中列的逗号分隔值

    我有一个如下表 ID NAME 1001 A B C 1002 D E F 1003 C E G 我希望这些值显示为 ID NAME 1001 A 1001 B 1001 C 1002 D 1002 E 1002 F 1003 C 1003
  • 为什么最大堆栈深度不断变化?

    对于以下代码 最后的输出 最大堆栈深度不断变化 include
  • Facebook 新的用于图形 API 的 PHP SDK - 多查询

    我对查询参数值应该是什么样子一筹莫展 因此 据我所知 要在图形 API 库中提交多重查询 以下是执行它的代码方法 param array method gt fql multiquery queries gt multiQuery call
  • Amazon Elastic Block Storage (EBS) 和 Microsoft Azure 驱动器之间的差异

    我一直在考虑使用 Amazon EC2 或 Microsoft Azure 来托管新项目 并计划使用其中之一亚马逊EBS http aws amazon com ebs or 微软Azure驱动器 http www microsoft co
  • 组合框更改其他组合框的值

    我的表单上有两个组合框 每个都有值 Yes 和 No 我想要的是当一个改变时另一个得到相反的结果 如果第一个是 Yes 另一个是 No 我需要用 Javascript 来做 我看到这个问题如何使用 JavaScript 更改组合框中的 选定
  • C++ 从 const int* 到 int* 的转换会产生意想不到的结果[重复]

    这个问题在这里已经有答案了 在c 中 我们知道我们不能将const int 转换为int 但我有一个代码片段 可以将 const int 转换为 int 我是 C 的初学者 我在 google 上搜索了这个 但我刚刚得到了提到 const