關於C標準的另一個問題。我已經測試了這個,我總是得到NULL < ptr
爲真,其中ptr
是與NULL
不同的指針。但我知道標準說指針算術和比較只在數組邊界內定義。我只是不確定特定比較NULL < ptr
是否合法。NULL指針<任何其他指針(NULL除外)?
編輯:我被讀數來說,K & R和我發現下面的話:
任何指針可以進行有意義的比較與零的相等或不相等。但是,對於不指向相同數組的成員的指針進行算術或比較的行爲是未定義的。
我不知道這是否會影響已經給這個問題的答案。無論如何,我仍然不確定是否p > NULL
始終保證或不返回true,其中p
是指針!=NULL
。
不爲NULL與0值指針的特殊情況?所以只要你沒有引用你的0地址,那麼NULL
@JoshPetitt:這裏最重要的是C中指針的關係比較受限於一組非常有限的場景。兩個操作數都必須是指向相同聚集的指針,否則'<'的行爲是未定義的。所以,如果你有'int main(){int x,y; return&x <&y; }',行爲是不確定的。由於空指針指向沒有對象,所以執行關係比較,其中任一操作數(或兩個操作數!)都是空指針會產生未定義的行爲。 –
然而,請注意,定義了'(uintptr_t)&x <(uintptr_t)&y',並且對於該函數的任何給定調用,它將爲0或1. –