0

让我们考虑一些奇怪的假设嵌入式系统,我需要生成和使用指向或可能指向地址空间的第一个字节的指针。也就是一个等于零的指针。不是 NULL 指针,而是完全有效的零指针,它可能会像任何其他指针一样被取消引用或递增或视为数组。在将 NULL 指针视为特殊但没有真正的 NULL 类型的语言中,我将如何做到这一点?

4

3 回答 3

5

在一些罕见的旧机器上,整个“具有不同于 0 特殊值的特殊值的 NULL 指针”是可能的,但在实践中,指向地址 0 的 NULL/0 指针将具有值 0,并且在大多数机器上实际上指向地址 0 .

它将是完全可取消引用的,如果有一些内存映射到该区域,您可以在该地址上写入。

我曾经在我使用的嵌入式平台上拥有它。所以我过去常常在地址 0 上放置一个调试器观察点,因为对该区域的所有访问都是 NULL 指针取消引用。以这种方式发现了一些错误^^

于 2012-10-11T22:10:35.517 回答
3

在大多数架构中,NULL 指针根本没有什么特别之处,它只是一个地址为 0 的常规指针。如果您正在使用具有实际内存的嵌入式系统,它应该可以正常工作。如果您尝试检查指针是否为空值,则唯一的问题是,所以不要这样做。

于 2012-10-11T22:07:02.977 回答
0

如果有帮助,寄存器定义(指向特定地址的指针)写成(在我的 CodeWarrior 副本中)为:

#define REGISTER_XYZ      (*(vuint32 *)(0x40100000))

请注意vuint,因为它是一个不稳定的位置(可能会在我们的控制范围之外发生变化),它可能与您相关,也可能与您无关。

并将 0x40100000 替换为您选择的地址,natch。

于 2012-10-12T09:23:36.503 回答