发件人:Richard Stamp
新闻组:comp.lang.c
主题:Re: NULL 与 Int 0
日期:1999年2月7日 星期日 16:57:20 -0000
Message-ID:<918407071.27444.1.nnrp-12.9e98ce80@news.demon.co.uk>
References:<79fckc$jc2$1@news1.mts.net> <79fdke$1r8$1@remarQ.com> <79ijbq$njb$1@nnrp1.dejanews.com> <36BD1771.7835@infi.net> <918393784snz@genesis.demon.co.uk>

Lawrence Kirby 在消息 <918393784snz@genesis.demon.co.uk> 中写道:... >在“地址 0”可以
>指向有效对象的平台上,空指针工作得非常好。但是,空指针
>应该与零进行*比较*相等是有原因的,那就是像if ()
>这样的语句会自然地执行。鉴于此,将空指针常量
>以一致的方式定义是有意义的。

我认为,人们之所以觉得这令人困惑(而且很明显很多人确实觉得困惑;我记得很久以前我也非常困惑),是因为零在不同的情况下含义会发生变化。

通常零代表整数零,但在某些情况下它代表空指针。人们很自然地试图找到它们之间的联系,并将空指针视为指向地址 0,但正如 FAQ 所解释的那样,这是一种无效的方法。

我们都熟悉运算符根据上下文改变其含义(例如,运算符 '-' 与指针一起使用时的行为与与数字一起使用时的行为截然不同),但看到常量那样行事则更令人惊讶。

祝好,
Richard