首页 > 后端开发 > C++ > 为什么'==”运算符不能用于比较 C 数组?

为什么'==”运算符不能用于比较 C 数组?

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

Why does the `==` operator not work for comparing C   arrays?

理解 C 中的数组相等比较

数组是 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 中,当在表达式中使用数组时,数组会衰减为指向其第一个元素的指针。因此,语句:

if (iar1 == iar2)
登录后复制

相当于:

if (&iar1[0] == &iar2[0])
登录后复制

由于 &iar1[0] 和 &iar2[0] 代表不同的内存位置,因此比较结果为 false。

逐元素数组的替代方案比较:

不要使用 == 运算符比较数组,有两种推荐的方法:

  1. 使用循环:

要执行逐元素比较,您可以迭代数组并检查每个元素单独使用:

bool areEqual = true;
for (int i = 0; i < 5; ++i) {
    if (iar1[i] != iar2[i]) {
        areEqual = false;
        break;
    }
}

if (areEqual) {
    cout << "Arrays are equal.";
} else {
    cout << "Arrays are not equal.";
}
登录后复制
  1. 使用 std::array:

C 标准库提供了 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) {
    cout << "Arrays are equal.";
} else {
    cout << "Arrays are not equal.";
}
登录后复制

以上是为什么'==”运算符不能用于比较 C 数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

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