为什么我必须重新解释指针指针?

2024-01-10

So this static_cast代码是完全合法的:

int n = 13;
void* pn = static_cast<void*>(&n);
void** ppn = &pn;

但这必须做成一个reinterpret_cast编译:

int n = 13;
int* foo = &n;
void** bar = static_cast<void**>(&foo);

如果我不更改它,我会收到错误:

错误 C2440:static_cast: 无法转换自int ** to void **注意:指向的类型是不相关的;转换需要reinterpret_cast、C 风格转换或函数风格转换

所以我认为问题是“类型不相关”。但我还是不明白,从int* to void*他们怎么可能不相关int** and a void**?


intvoid。同样适用于int** and void**所以它们不能使用转换static_cast.

void*然而,是special。任何数据指针类型(包括int*) 可static_cast into void*并返回,尽管没有类型与之相关void(更进一步,转换为void*不需要强制转换,因为它是隐式的)。int*没有这个属性,也没有void**除此以外也没有任何其他指针void*.


已授予的额外自由void*有额外的限制。void*不能间接,也不能与指针运算一起使用。这些限制之所以可能,是因为永远不可能有类型的对象void。或者从相反的角度来看,物体void由于这些限制而无法存在。

void**不能给予这些自由,因为不能给予同样的限制。不能给予这些限制,因为void*物体确实存在并且它们需要存在。如果我们不能间接或迭代void**,那么我们就不能使用数组void*例如。

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

为什么我必须重新解释指针指针? 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 现在无法查询选项卡(用户可能正在拖动选项卡)

    我有一个 chrome 扩展 可以通过以下代码访问活动选项卡 chrome tabs query active true result gt 这一直工作得非常好 直到最近的更新 我不再能够查询该选项卡 并在控制台中打印以下错误 Tabs c
  • Cocoa OSX:如何使图像可拖动

    我有一个带有图像的面板 我想让它可以通过 拖动 将文件 不是图像 图像仅作为文件的图标 复制到文件夹中应用程序外部的图像以及接受拖入其中的文件的任何其他应用程序 例如 Finder 我怎样才能做到这一点 我实施了NSDraggingSour
  • iOS7 中固定页眉和页脚的网页滚动问题

    这对我来说很难解释 但我会尝试 首先 我的网页在 iOS6 x Android W7 中的 mobilebrowser 以及桌面浏览器 IE9 Safari 和 Chrome 上运行 该问题发生在iOS7中的苹果移动Safari浏览器中 我
  • 如何在cordova android应用程序中使用proguard

    我有一个完成的 cordova 项目 我想使用 proguard 来防止其他人对 APK 进行逆向工程 但我在这方面遇到了困难 In http developer android com tools help proguard html h
  • 无法执行简单的导航到查看和返回 SwiftUI 导航栏按钮

    我正在尝试使用 SwiftUI 进行从一个视图到另一个视图的简单导航 一个栏按钮项目 我尝试了三种不同的方法来调用新视图 在正文视图中使用 Button 可以 但在导航中使用 NavigationBarItems bar 以两种不同的方式失
  • 如何在android中创建自定义通知

    我需要创建一个自定义通知而不是 android 中的默认通知 当前通知有一个图标 标题和消息 如下图所示 我想要它像这样定制 我怎样才能做到这一点 通知视图 普通视图 普通视图中的通知出现在高度高达 64 dp 的区域中 即使您创建具有大视
  • 如何将两个函数传递给react中的onClick事件

    我想将两个函数传递给onClick事件是handleSubmit and handleDelete to the HomePage js来自HomeItem js 这是我的错误 No duplicate props allowed reac
  • C# - 通过相同的方法传递不同类型的对象

    原始问题 所以我有这 3 个对象 public class obj1 public int Id get set public string Name get set public class obj2 public int AccNum
  • Android 版 Google 登录:无法解析 RC_SIGN_IN

    我正在尝试通过移动应用程序通过后端服务器进行身份验证 我正在关注这个文档 https developers google com identity sign in android sign in https developers googl
  • 使用 Google Apps 脚本标记 Gmail 邮件(不是整个线程)

    是否可以搜索带有 应用程序脚本队列 标签的消息并为这些特定消息 而不是整个线程 提供新标签 当我使用 GmailApp search label Apps script queue 时 我收到请求的邮件 但是当我为这些邮件分配新标签时 该线
  • 如何包含动态时间?

    我正在尝试提取有关时间段的日志 当没有时 下面的程序运行得很好 给出小时数 并提取该范围内的日志 但现在我还包括动态给出的开始和结束 即说之间8 am to 8pm or 6am to 8am等等 我怎样才能得到它 当前程序中的任何编辑也可
  • 在 SwiftUI 的 Picker 中添加新元素

    我找不到如何在 SwiftUI 的选择器视图中添加某些元素 在我的示例中 我想在单击按钮时在选择器中添加 Z 值 struct ContentView View State var values String A B C State pri
  • hash( (-2,2) ) == hash( (2,-2) ) 返回 True (Python)

    所以 这很有趣 Python 的hash臭名昭著的回报True on hash 1 hash 2 正如其他地方所讨论的 https stackoverflow com questions 10130454 why do 1 and 2 bo
  • 我如何要求 Lisp 编译器忽略(标签种类)函数?

    我盯着斯蒂尔的Common Lisp 语言直到我脸色发青 仍然有这个问题 如果我编译 defun x labels y 5 princ x terpri 有时候是这样的 home clisp experiments clisp c q x
  • 信号发射结构

    这个问题在我脑海里萦绕了很多天 但直到现在我才弄清楚 如果我尝试发送一个结构信号 struct radarStruct unsigned char Data unsigned int rate unsigned int timeStamp
  • ADB 设备卡在“连接”状态

    我正在尝试将我的手机连接到 Android Studio 以跟进一些应用程序开发 我目前正在努力将手机正确连接到计算机 因为 ADB 似乎从未连接到设备 当尝试在设备上启动应用程序时 这是 Android Studio 在运行控制台中告诉我
  • 如何向背景图像添加颜色叠加? [复制]

    这个问题在这里已经有答案了 我在 SO 和 Web 上都看到过很多这个问题 但它们都不是我要寻找的 如何仅使用 CSS 将颜色叠加添加到背景图像 HTML 示例 div class testclass div CSS 示例 testclas
  • R 和 ggplot-将 x 轴更改为日期可消除位置闪避

    我一直在使用 ggplot 来创建绘图 并且我总是喜欢水平偏移数据点 这样误差线就不会重叠 我发现当我使用日期数据作为 x 轴时 我失去了偏移数据点的能力 DF data frame Date c 2006 09 01 2007 09 01
  • 我怎样才能停止ajax请求(不要等到响应到来)?

    如果我使用Ajax发送请求并且这个请求需要很长时间 如果我想发送花药请求我该怎么办 当前的行为第二个请求 我做了 等待第一个请求得到响应 NOTE 我想在整个应用程序上执行此行为 任何新请求立即执行 而不是等待旧请求首先完成 我的应用程序使
  • 为什么我必须重新解释指针指针?

    So this static cast代码是完全合法的 int n 13 void pn static cast