如何表示指向地址空间开头的指针?

时间:2012-10-11 22:02:30

标签: c++ c pointers language-agnostic embedded

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

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

请注意 vuint ,因为它是一个易变的位置(可能会在我们无法控制的范围内更改),这可能与您无关。

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