>백엔드 개발 >C++ >C에서 `==`가 배열의 동등성을 비교하는 데 실패하는 이유는 무엇입니까?

C에서 `==`가 배열의 동등성을 비교하는 데 실패하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-16 09:17:03280검색

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.";
}

많은 사람들이 실망스럽게도 이 코드는 "배열은 그렇지 않습니다. 동일한." 이 비교가 예기치 않게 실패하는 이유는 무엇입니까?

Array Decaying Unraveled

그 이유는 "어레이 붕괴"라는 개념에 있습니다. C에서 배열은 여기의 비교 연산자와 같이 특정 컨텍스트에서 사용될 때 첫 번째 요소에 대한 포인터로 자동으로 감소됩니다. 결과적으로 iar1과 iar2는 서로 다른 배열에 대해 서로 다른 첫 번째 요소의 주소를 효과적으로 비교합니다.

요소별 비교

두 요소가 있는지 올바르게 결정하려면 배열에는 동일한 요소가 있으므로 요소별 비교가 필요합니다. 이를 달성하려면 루프를 구현하여 각 요소를 개별적으로 비교하거나 C 표준 라이브러리의 std::array 컨테이너를 활용할 수 있습니다.

std::array를 Rescue

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으로 문의하세요.