数组相等比较之谜:为什么 == 不等于数组?
考虑以下代码片段:
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 }
现在,代码将正确输出“数组相等。”
回顾智慧
以上是为什么 C 中的 == 无法比较数组是否相等?的详细内容。更多信息请关注PHP中文网其他相关文章!