배열 동등 비교 미스터리: == 배열이 같지 않은 이유는 무엇입니까?
다음 코드 조각을 고려하십시오.
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 }
를 사용하여 수정된 코드 조각입니다. 이제 코드는 "배열이 동일합니다."를 올바르게 출력합니다.
지혜 요약
위 내용은 C에서 `==`가 배열의 동등성을 비교하는 데 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!