>백엔드 개발 >C++ >C 배열을 비교할 때 '==' 연산자가 작동하지 않는 이유는 무엇입니까?

C 배열을 비교할 때 '==' 연산자가 작동하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-16 17:00:03903검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.