C++ 指針比較大小

C++ 指針比較大小
對象指針的值是映射到線性地址空間的整數值,C/C++允許對兩個類型相同的對象指針進行比較運算,包括==、!=、<、>、<=、>=。所以LZ問題的答案是肯定的。
對於不同類型的對象指針,經過轉換可以比較;由於C++的靜態類型檢查比C更嚴格,相同的代碼有可能C++編譯器產生編譯錯誤,而C編譯器僅因爲缺少隱式轉換產生警告。
C++的成員指針一般用偏移量實現,但不一定表示具體的地址或偏移量(可以看成一個成員不可見的結構體,和編譯器以及指向的類型相關;甚至在同一編譯器上不同成員指針類型的sizeof的結果都不是唯一的,這種情況下連按值轉換都無法實現,自然不能比較),轉換成整數是無意義的。類型不同的成員指針無法比較;類型完全相同的成員指針無法進行operator==和operator!=以外的(算術)比較運算。
--
1、指針就是內存地址。
     錯誤,例如可能表示寄存器地址空間。
2、指針說白了就是32位整。
    錯誤,例如在16位平臺上指針的值是一個16位無符號整數,在64位平臺上指針的值是一個64位無符號整數。
此外,共同的錯誤是,在C/C++中,指針有類型,地址作爲整數,沒有類型(事實上地址根本不是語言本身應該涉及的概念)。指針可以是一個對象,地址本身只是一個右值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章