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