首页 >后端开发 >C++ >为什么 C 中的 == 无法比较数组是否相等?

为什么 C 中的 == 无法比较数组是否相等?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-16 09:17:03289浏览

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