陣列相等比較之謎:為什麼 == 不等於陣列?
考慮以下程式碼片段:
int main() { int iar1[] = {1, 2, 3, 4, 5}; int iar2[] = {1, 2, 3, 4, 5}; if (iar1 == iar2) cout << "Arrays are equal."; else cout << "Arrays are not equal."; }
令許多人沮喪的是,這段程式碼錯誤地列印了「陣列不相等」。為什麼這個比較會如此意外地失敗?
陣列衰減揭秘
原因在於「陣列衰減」的概念。在 C 中,當在某些上下文中使用時,陣列會自動衰減為指向其第一個元素的指針,例如這裡的比較運算子。因此,iar1 和 iar2 有效地比較第一個元素的位址,這些位址對於不同的陣列是不同的。
逐元素比較
正確判斷兩個元素是否相同陣列有相同的元素,需要逐元素比較。為了實現這一點,可以實作一個迴圈來單獨比較每個元素,或利用 C 標準函式庫中的 std::array 容器。
std::array 來救援
std::array 是一個固定大小的容器,其行為類似於數組,但提供附加功能,包括比較兩個數組的元素相等性的能力。這是使用 std::array 修改後的程式碼片段:
std::array<int, 5> iar1 {1, 2, 3, 4, 5}; std::array<int, 5> iar2 {1, 2, 3, 4, 5}; if (iar1 == iar2) { // arrays contents are the same } else { // not the same }
現在,程式碼將正確輸出「陣列相等。」
回顧智慧
以上是為什麼 C 中的 == 無法比較陣列是否相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!