理解 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。
逐元素数组的替代方案比较:
不要使用 == 运算符比较数组,有两种推荐的方法:
要执行逐元素比较,您可以迭代数组并检查每个元素单独使用:
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."; }
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中文网其他相关文章!