【发布时间】:2014-03-07 11:11:53
【问题描述】:
C 陷阱和陷阱 2.1 我认为 0 总是无效的地址。他怎么能把函数放在那个位置上?
【问题讨论】:
标签: c
C 陷阱和陷阱 2.1 我认为 0 总是无效的地址。他怎么能把函数放在那个位置上?
【问题讨论】:
标签: c
这取决于架构。
从书中:
我 一次 谈过 到 某人 谁 曾是 写作 一种 C 程序 那 曾是 去 到 跑步 独立的 在 一种 小的 微处理器(在此回答)。 什么时候 这 机器 曾是 切换 在, 这 硬件 将 称呼 这 子程序 谁的 地址 曾是 存储 在 地点 0。 在 命令 到 模拟 转弯 力量 在, 我们 有 到 设计 一种 C 陈述 那 将 称呼 这 子程序 明确地。 后 一些 想法, 我们 来了 向上 和 这 以下:
(*(void(*)())0)();
【讨论】:
对于微处理器/微控制器,除非硬件禁止,否则您可以原始访问任何 RAM/闪存地址。因此在微处理器中访问地址0是完全有效的。
【讨论】:
我认为(* (void (*)()) 0) 表示它正在尝试调用位于内存中地址0x00000000 的函数(这可能是一个无效地址)
关于 stackoverflow What does this C statement mean? 的一个非常相似的问题可能会有所帮助
【讨论】:
()。