原始类型指针之间的转换

2023-12-06

以下是明确定义的:

char* charPtr = new char[42];
int* intPtr = (int*)charPtr;

charPtr++;
intPtr = (int*) charPtr;

The intPtr未正确对齐(至少在两种情况之一)。仅仅把它放在那里就违法了吗? UB在任何阶段都使用它吗?你如何使用它,又如何不能使用它?


一般来说,如果对齐要求如下,则结果是未指定的(5.2.10p7)int大于char,他们通常会这样。结果将是该类型的有效值int *所以它可以是例如打印为指针operator<<或转换为intptr_t.

因为结果有一个未指定的值,除非由实现指定,否则间接它并对结果执行左值到右值转换是未定义的行为int左值(除了未评估的上下文)。转换回char *不一定会往返。

不过,如果原来的char *本身就是演员阵容的结果int *,然后强制转换为int *算作往返行程的后半程;在这种情况下,强制转换已定义。

特别是,在上述情况下,char *是一个结果new[]表达式,我们保证(5.3.4p10)char *指针适当对齐int, 只要sizeof(int) <= 42。因为new[]表达式从分配函数获取其存储,3.7.4.1p2 适用;这void *指针可以转换 指向具有基本对齐要求的任何完整对象类型的指针,然后用于访问对象[...]这与 5.3.4p10 的注释一起强烈暗示,这同样适用于char *返回的指针new[]表达。在这种情况下int *是一个指向未初始化的指针int对象,因此在其间接寻址上执行左值到右值转换是未定义的 (3.8p6),但对其间接寻址的分配是完全定义的。这int对象是在分配的存储空间中(3.7.4.1p2) 因此转换int *回到char *将产生每 1.8p6 的原始值。这不适用于递增的char *指针为除非sizeof(int) == 1它不是一个地址int object.

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

原始类型指针之间的转换 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • Android BroadcastReceiver 无法注册

    我正在尝试向我的音频应用程序添加一个简单的广播接收器 以便当用户单击耳机上的 ACTION MEDIA BUTTON 时我可以将所有内容静音 我读到您可以在清单中注册它 也可以在代码中动态注册它 我已经在代码中注册了它 因为我需要调用主活动
  • BeautifulSoup - 组合连续标签

    我必须使用最混乱的 HTML 其中各个单词被分成单独的标签 如下例所示 b span style font size 14 0pt line height 50 font family none I span b b span style
  • C# 中的方法重载和动态关键字

    我还没有升级到 4 0 否则我会自己检查代码片段 但我希望有专家能够对此发表评论 在下面的代码中 将适当Print 方法在运行时调用 在 C 2010 中这样称呼它是否合法 public void Test dynamic objX Ins
  • TensorFlow C++,运行时问题

    我使用 TensorFlow python 创建了一个模型 现在我已经用 C 加载了模型 并使用 session gt Run 提供输入张量 运行它 代码已编译并链接良好 但是一旦在运行时到达会话 gt 运行 它就不会进一步继续 也不会创建
  • 嵌套“for”循环 n 次

    我正在编写一个查找密码的程序 当我看到必须针对所选密码长度的变量重复替换部分密码的 for 循环时 我遇到了问题 该程序的目标是生成并检查任何字符数组的密码 从 0 开始并经过 n 次 其中 0 是第一个字符 是最后一个字符 有没有办法重复
  • 无法运行简单的java代码

    我已经为我的 64 位 Windows 7 下载了一个 Java 开发人员工具包 在记事本中写下了我的代码 尽管代码是从命令提示符编译并创建 class 文件 但它拒绝运行并显示错误代码 java lang NoClassDefFoundE
  • MVC 捆绑 - 包含单个捆绑包的 .min 文件

    我的应用程序中有一个文件 我只有一个缩小版本 我想为其创建一个捆绑包 bundles Add new ScriptBundle bundles maskedinput Include Scripts jquery maskedinput 1
  • FormulaR1C1的作用是什么?

    我一直在看公式R1C1作为一个函数 它到底是如何工作的 我明白互联网上所说的第 1 行第 1 列 但人们实际上是如何让它发挥作用的呢 是什么最终结果使用的公式R1C1 也可以将其更改为从工作表中的特定点开始 还是始终为 R1C1 那么是否可
  • 更改 .pro 文件后,Qt 不刷新 Makefile

    我发现 Qt Creator 3 0 1 存在一个奇怪的问题 即在编译和链接之前没有刷新配置的当前状态 为了更好地解释自己 假设我的代码最初没有编译 因为它缺少一个库 例如 opencv core248d 如果我将其添加到 pro 文件中
  • 最快的 Matlab 文件读取?

    我的 MATLAB 程序正在读取一个大约 7m 行长的文件 并且在 I O 上浪费了太多时间 我知道每一行都被格式化为两个整数 但我不知道它们到底占用多少个字符 str2num 慢得要命 我应该使用什么 matlab 函数来代替 注意 我必
  • 生成 SEO 友好的 URL(slugs)[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 定义 From 维基百科 A slug是 URL 的一部分 它使用以下方式标识页面 人类可读的关键字 为了让用户更容易输入 URL 通常会使用特殊字符 也被删除或替换 例如 重音字符是 通
  • Pysftp 失败,并显示“身份验证失败”和“服务器未发送 server-sig-algs 列表;默认为我们的第一个首选算法 ('rsa-sha2-512')”

    我有 ec2 实例和 ubuntu v20 04 它有 python v3 8 10 和 pysftp 0 2 9 我使用以下命令从 ppk 文件生成 pem 文件 puttygen sftp server ppk O private op
  • 从 iPhone 相册导入和保存照片的正确方法是什么?

    我正在将 iPhone 相册中的照片导入到我的应用程序的文档文件夹中 这是我的代码 for int j 0 j lt assetArray count j ALAsset assest assetArray objectAtIndex j
  • 如何从文件中读取数据块,然后从该块读入向量?

    假设我有一个包含 x 条记录的文件 一个 块 保存 m 条记录 文件中的块总数n x m 如果我知道一条记录的大小 比如 b 字节 一个块的大小 b m 我可以使用系统命令 read 一次读取完整的块 还有其他方法吗 现在 我如何从该块中读
  • mySQL - 以任一顺序选择 2 列的不同组合

    我有一个表 其中包含两个用户之间的消息 我需要找到用户的所有不同组合 无论他们是发送者还是接收者 ID sender receiver message 1 bob bill message 1 2 bill bob message 2 3
  • 从 CVS 迁移到 Mercurial:分离项目

    我们有一个具有多年开发历史的CVS存储库 一个项目 CVS文件夹 下有3个项目 这些应该是 Mercurial 存储库中的不同存储库 它们采用以下方案 Project 子项目1 子项目2 子项目3 有没有办法在 cvs2hg 过程中自动执行
  • SQLCMD 命令,如何将输出保存到日志文件中

    以下问题帮助我解决了执行文件中多个 SQL 脚本的问题 运行目录中的所有 SQL 文件但是 我不知道如何将输出重定向到单独的日志文件中 有人建议使用以下脚本 但由于我不理解它 所以它不起作用 我也找不到错误 for f in sql do
  • 在 MySQL 中处理事件

    我有一个存储过程 它基本上从一个表中选择数据并插入到另一个表中 基本上我是手动进行数据归档 现在 我想写一个事件 就像讨论的那样here 然而 在阅读该文章并在线研究后 我开始知道不可能在存储过程中创建事件 有没有办法在 MySQLWork
  • Tensorflow.js inputShape 与模型输入不匹配

    这似乎很基本 但我无法弄清楚 所以我有样本 数据 输入 它是一个由 10 个整数组成的数组 而输出 标签只是一个整数数组 让我解释一下 因为我的数据可能结构不正确 基于 10 个整数的输入 我告诉模型结果是标签 输出中的 1 个整数 最重要
  • 原始类型指针之间的转换

    以下是明确定义的 char charPtr new char 42 int intPtr int charPtr charPtr intPtr int charPtr The intPtr未正确对齐 至少在两种情况之一 仅仅把它放在那里就违