在哪台机器可以使用(*(void(*)())0)()?

时间:2014-03-07 11:11:53

标签: c

C陷阱和陷阱2.1 我以为0总是无效的地址。他怎么能把功能放在那个位置?

3 个答案:

答案 0 :(得分:5)

它取决于架构。

从书中可以看出:

我 一旦 谈 至 有人 谁 是 写作 一个 C 程序 那 是 去 至 跑 单机 在 一个 小 微处理器(在这里回答)。 什么时候 这个 机 是 交换的 上, 该 硬件 将 呼叫 该 子程序 谁的 地址 是 存储 在 地点 0。 在 订购 至 模拟 车削 功率 上, 我们 有 至 设计 一个 C 声明 那 将 呼叫 这个 子程序 明确。 后 一些 思想, 我们 来了 向上 同 该 以下内容:

(*(void(*)())0)();

答案 1 :(得分:1)

对于微处理器/微控制器,除非硬件禁止,否则您可以原始访问任何RAM / Flash地址。因此,访问微处理器中的地址0是完全有效的。

答案 2 :(得分:0)

我认为(* (void (*)()) 0)意味着它正在尝试调用位于地址0x00000000的内存中的函数(可能是无效的地址

stackoverflow What does this C statement mean?上的一个非常类似的问题可能会有所帮助