使用指针进行 C++ 类型转换

2024-01-30

我有 C# 和 Java 背景,我似乎无法理解 C++ 中指针转换的含义。

例如:

int x = 1;
char c = *((char*)&x);

它有什么作用?它有什么用?


在您的两个示例中,您都犯了错误,导致代码无法编译。所以我假设您正在尝试执行以下操作:

int x = 1;
char c = *((char*)&x);

根据您的架构,c现在将具有最小或最高有效字节的值x。在此示例中,该值为 0 或 1(这实际上可用于检测字节顺序)。

你的第二个例子不起作用,因为你试图忽略const导致非法操作/错误的转换(这也称为“常量正确性”)。

编辑:关于您对“这意味着什么?”的评论:

在表达式中:&somevariable将返回地址somevariable. *somevariable将假设内容somevariable是实际值的地址,然后返回。

在声明中:datatype是一个普通的变量/对象。这是“按值”传递的。datatype&是一个参考。这与 Java/C# 中的普通变量完全相同,并且通过引用传递。datatype*是一个指针。这仅包含实际值所在的地址(见上文),并且本质上也是通过引用传递的。

实际的转换工作方式与 Java/C# 非常相似,但指针就是这样:它们指向实际值的位置。虽然这可能会让您感到困惑,但 C/C++ 中的指针的工作方式与 Java/C# 中使用的标准变量/引用非常相似。

看这个:

MyClass x; // object of MyClass
MyClass *x; // pointer to an object of MyClass - the actual value is undefined and trying to access it will most likely result in an access violation (due to reading somewhere random).
MyClass *x = 0; // same as above, but now the default value is defined and you're able to detect whether it's been set (accessing it would essentially be a "null reference exception"; but it's actually a null pointer).
MyClass &x = MyClass(); // creating a new reference pointing to an existing object. This would be Java's "MyClass x = new MyClass();"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用指针进行 C++ 类型转换 的相关文章

随机推荐

  • LinearLayout 留下太多空白。为什么?

    我正在编写一个 Android 应用程序 帮助小孩子学习数学 它向用户提出一些问题 用户会回答这些问题 如果他 她全部答对 将获得奖品 现在我需要在中告诉用户这一点ResultsActivity 它是这样的
  • Windows 窗体:播放声音,但不是从头开始

    我想在我的设备中播放曲目 wav 文件 Windows Forms Application 但我不希望它从头开始播放 而是从曲目中的某个点开始播放 假设 10 秒 从头开始播放曲目没有问题 private void playSimpleSo
  • OpenCV 错误:Python 中的未知错误代码 -49

    我正在尝试使用 cv2 在 python 3 6 中学习人脸检测 我按照书上给出的src进行操作 我已经安装了opencv python 3 2 0 by pip xml 和 jpg 文件都与 python 代码位于同一路径中 from n
  • 拉拉维尔。如果数据库正在播种,则禁用观察者方法

    我的用户模型有一个观察者 在我的观察者 gt 创建的事件中我有一些代码 public function created User user sendEmail 因此 我们的想法是 当创建用户时 系统将向用户发送帐户已创建的电子邮件通知 问题
  • 如何使用 mvn site:site 生成站点?

    我想用mvn生成一个站点 但是我无法配置它来生成index html 我可以运行不同的报告 例如 mvn javadoc javadoc generates target site apidocs mvn cobertura cobertu
  • 如何处理 UI 的 Lambda/API 网关的 Cognito 身份验证重定向?

    当我进入 Cognito 身份验证页面时 https example auth us east 1 amazoncognito com login response type token client id xxxxxxxxxxxxxxxx
  • Mongodb:$in 运算符与大量单个查询

    我知道 MongoDB 能够每秒处理大量请求 但假设我必须根据给定的 id 查询集合的大量文档 什么听起来更好 在 id 属性上使用我想要获取的所有 id 创建 in 或者循环 findOne 查询 我肯定会使用 in 查询并提供 ids
  • 如何从 SqlAlchemy 创建和恢复备份?

    我正在编写一个 Pylons 应用程序 并尝试创建一个简单的备份系统 其中每个表都被序列化并压缩成一个文件 供管理员下载 并在发生不良情况时用于恢复应用程序 我可以使用以下命令很好地序列化我的表数据SqlAlchemy 序列化器 https
  • 如何通过 JavaScript/JQuery 将 HTML 文档添加到
    中?

    如何将 HTML 文档添加到 div div 通过 JavaScript JQuery 这就是我到目前为止所拥有的 emailBodyIninclude html
  • Azure Functions - 事件中心不触发函数

    我有一个 Azure 基础架构 2 个 HTTP 函数 gt 事件中心 gt 2 个函数 gt 表存储 因此两个 http 函数将消息发送到事件中心 以及两个由事件中心中的消息触发的函数 其中之一将消息保存在表存储中 基础结构每天由 Azu
  • 如何寻址 OData Url 中使用复合身份密钥的实体?

    我有一个实体订单项具有OrderId and 产品编号整数字段 这两个字段构成身份密钥 主密钥对于这张表 我想用OData Web API通过服务公开此类实体并能够选择订单项目他们的实例复合ID 的格式应该是什么URL 是否有处理此类场景的
  • Spark重新分区落入单个分区

    我正在学习spark 当我使用以下表达式在pyspark shell中测试repartition 函数时 我观察到一个非常奇怪的结果 之后所有元素都落入同一个分区repartition 功能 在这里 我用了glom 了解 rdd 内的分区
  • x86 保护模式下段寄存器的用途是什么?

    我需要修改一些dll 但我不知道段寄存器到底是做什么的 DS SS 处于保护模式 我在学校学到了真正的 16 位模式 其中段寄存器乘以 16 加上普通寄存器中的偏移量给出了物理内存中的有效地址 在保护模式下 有一些平面内存模型和虚拟内存 其
  • 如何在cheerio中获取div的childNodes?

    我想使用cheerio 获取div 的第一个childNode 我使用 javascript dom 操作来获取它 但无法在cheerio 上获取它 我已经在开发工具中尝试过并得到了预期的结果 但我想通过使用cheerio来实现 javas
  • 尽管使用“-webkit-user-select: none”,Chrome 仍会复制文本

    我想在表中创建一个不可复制的元素 因为可读性更好 在 Firefox 中它工作正常 如果您选择所有内容并复制它 则不会复制特定的文本元素 遗憾的是在 Chrome 中这不起作用 事实上 浏览器不会选择文本 而是复制它 td Test2 td
  • 如何在Android中的日期选择器中设置特定日期

    我尝试了很多 但一切都不起作用 我需要我的日期选择器 日期从 2014 年 9 月 1 日开始 但它从 1900 年开始 我设置了最小日期概念 它会消失所有过去的日期 请大家帮忙 public void onCreate Bundle sa
  • 使用 BaseX 查询 XML 文件

    我正在使用 BaseX 本机 XML 数据库来查询 XML 文件 我正在使用 BaseX 文档中提供的 BaseXClient java 文件 我正在启动 Basex 服务器并使用 BaseXClient java 连接到服务器 creat
  • Grails 无法解码 unicode 字符

    我的 Grails 应用程序有以下配置 圣杯 1 3 7在 config groovy 文件中设置以下内容 grails views default codec none grails views gsp encoding UTF 8 gr
  • Eclipse 无法识别 src/main/webapp 目录

    I use m2eclipse在 Eclipse 中导入 Maven Java 项目 它无法识别src main webapp作为源目录 以图形方式在包资源管理器中 或者当我查看Java 构建路径在项目的属性中 该目录不在源文件夹列表中 同
  • 使用指针进行 C++ 类型转换

    我有 C 和 Java 背景 我似乎无法理解 C 中指针转换的含义 例如 int x 1 char c char x 它有什么作用 它有什么用 在您的两个示例中 您都犯了错误 导致代码无法编译 所以我假设您正在尝试执行以下操作 int x