C陷阱和陷阱2.1 我以为0总是无效的地址。他怎么能把功能放在那个位置?
答案 0 :(得分:5)
它取决于架构。
从书中可以看出:
我 一旦 谈 至 有人 谁 是 写作 一个 C 程序 那 是 去 至 跑 单机 在 一个 小 微处理器(在这里回答)。 什么时候 这个 机 是 交换的 上, 该 硬件 将 呼叫 该 子程序 谁的 地址 是 存储 在 地点 0。 在 订购 至 模拟 车削 功率 上, 我们 有 至 设计 一个 C 声明 那 将 呼叫 这个 子程序 明确。 后 一些 思想, 我们 来了 向上 同 该 以下内容:
(*(void(*)())0)();
答案 1 :(得分:1)
对于微处理器/微控制器,除非硬件禁止,否则您可以原始访问任何RAM / Flash地址。因此,访问微处理器中的地址0
是完全有效的。
答案 2 :(得分:0)
我认为(* (void (*)()) 0)
意味着它正在尝试调用位于地址0x00000000
的内存中的函数(可能是无效的地址)
stackoverflow What does this C statement mean?上的一个非常类似的问题可能会有所帮助