首頁 >後端開發 >C++ >如何在 C 中安全地比較指標的相等性和排序?

如何在 C 中安全地比較指標的相等性和排序?

Susan Sarandon
Susan Sarandon原創
2024-12-03 09:08:11340瀏覽

How Do I Safely Compare Pointers for Equality and Ordering in C  ?

比較指針是否相等:C 標準演練

在C 中,比較指針是否相等可以很簡單,但需要遵守符合語言標準中概述的特定規則。

相等運算子 (==, !=)

對於相同類型的指針,使用 == 或 != 進行相等比較會產生直觀的結果。如果兩個指標都為空、都指向相同函數或都指向同一位址,則它們相等。

關係運算子 (, = )

相同類型的指標也可以使用關係運算子進行比較。如果它們指向相同的物件或函數,它們將按預期進行比較:p=q 產生 true,而 pq 產生 false。

但是,如果指標指向不同的物件或函數,或者如果其中之一為空,則關係比較的結果是未指定的。這意味著它們的行為取決於實現。

規則的例外

陣列元素:如果指標指向同一陣列的元素,指向索引較高的物件的指標比較較大。

Union成員: 如果指標指向同一個聯合體的成員,則轉換為 void* 後比較相等。

其他類型的指標:

  • 指向非靜態成員函數的指標:排序結果未指定。
  • 指向非靜態資料成員的指標具有不同存取控制的相同物件:排序結果未指定。
  • 指向相同聯合物件的非靜態資料成員的指標:轉換為 void* 後比較相等。

注意事項

  • 指向不同全域變數的指標不能使用關係比較運算子。
  • 變數範圍結束後,無法比較指向局部變數的指標。

獎勵:標準函式庫助理

標準函式庫提供了範本函式std::greater、std::less、std::greater_equal 和std:: less_equal,其中可以用來對任何類型的指標進行排序,即使內建運算子不能。

以上是如何在 C 中安全地比較指標的相等性和排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn