首页 > 后端开发 > C++ > 正文

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

Mary-Kate Olsen
发布: 2024-11-16 09:17:03
原创
219 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板