首頁  >  文章  >  後端開發  >  為什麼 C 中的 == 無法比較陣列是否相等?

為什麼 C 中的 == 無法比較陣列是否相等?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-16 09:17:03214瀏覽

Why Does `==` Fail to Compare Arrays for Equality in C  ?

陣列相等比較之謎:為什麼 == 不等於陣列?

考慮以下程式碼片段:

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
}

現在,程式碼將正確輸出「陣列相等。」

回顧智慧

  • 回顧智慧
  • 回顧智慧
回顧智慧回顧智慧回顧智慧回顧智慧回顧智慧回顧智慧數組衰減可能導致意外的相等逐元素比較對於準確的數組比較至關重要。 std::array 提供了一種執行逐元素相等性檢查的便捷方法。 這總是明智的了解數組衰減等語言功能的複雜性,以避免常見的陷阱。

以上是為什麼 C 中的 == 無法比較陣列是否相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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