在任何“主要平台”(我为了这个问题而定义为Windows,Mac和Linux),可以想象在程序地址空间中在地址0分配有效分配的指针(因此搞砸比较为NULL?) 标准是否甚至允许编译器/平台在地址0处进行有效分配?
答案 0 :(得分:7)
C ++标准允许它,但是这样的指针不会比较文字0
(NULL指针常量)。
主要操作系统中的用户模式应用程序永远不会有一个有效指针为0,甚至在-65536到65535范围内(以帮助检测来自NULL指针的偏移量)。
在大多数情况下,0
作为可用地址仅存在于嵌入式系统中,并且很少存在于PC操作系统的内核中。但虚拟内存系统保留了它,没有任何我听说过的例外。
答案 1 :(得分:2)
NULL
- 指针(或更确切地说:在需要指针的上下文中的0
标记)并不一定意味着地址0
,而是一个已知的地址在这个平台上无效。因此,假设符合标准的编译器,与空指针的比较是安全的。