> 백엔드 개발 > C++ > C의 포인터를 비교할 때 항등 연산자와 관계 연산자는 얼마나 신뢰할 수 있습니까?

C의 포인터를 비교할 때 항등 연산자와 관계 연산자는 얼마나 신뢰할 수 있습니까?

DDD
풀어 주다: 2024-11-19 13:19:03
원래의
714명이 탐색했습니다.

When Comparing Pointers in C  , How Reliable Are the Equality and Relational Operators?

객체 동등성을 위한 포인터 비교

예제와 같이 동일한 변수를 참조하는 포인터를 비교할 때:

int *a = something;
int *b = something;
로그인 후 복사

항등 연산자 "a == b"가 예상한 결과를 제공하는지 여부에 대한 의문이 생깁니다.

항등 연산자(==, !=)

C 표준에 따르면 동일한 유형의 포인터는 다음과 같이 동일한지 비교할 수 있습니다.

  • 둘 다 null이거나 동일한 함수를 가리키거나 동일한 주소를 나타내는 경우 동일한 것으로 비교됩니다.
  • Null 포인터는 서로 동일하게 비교되는 반면, Null이 아닌 포인터는 항상 Null 포인터와 동일하지 않게 비교됩니다.

관계 연산자(<, >, < ;=, >=)

포인터에 대한 관계 연산자는 동일한 유형의 객체 또는 함수에 대한 포인터에 대해서만 정의됩니다. 결과는 포인터가 동일한 개체나 함수를 가리키는지, 아니면 둘 중 하나가 null인지 여부에 따라 달라집니다.

예를 들어 배열의 경우 서로 다른 요소에 대한 포인터는 서로 비교하여 크거나 작습니다. 배열에서의 위치를 ​​기반으로 합니다. 그러나 배열이 아닌 객체나 동일한 객체의 멤버가 아닌 함수에 대한 포인터를 비교하면 지정되지 않은 결과가 나올 수 있습니다.

가상 함수에 대한 예외

다음 중 하나의 경우 포인터가 가상 멤버 함수를 가리키면 비교 결과는 표준에 의해 지정되지 않습니다.

실습 비교

등등을 사용한 포인터 비교에 유의해야 합니다. 연산자(==, !=)는 일반적으로 잘 정의되어 있으며 포인터가 동일한 개체를 가리키는지 확인하는 데 신뢰할 수 있습니다. 그러나 관계 연산자(<, >, <=, >=)는 특정 상황에 따라 동작이 다를 수 있으므로 주의해서 사용해야 합니다.

보너스: 다음과 비교 템플릿

표준 라이브러리는 std::less<>와 같은 포인터 비교를 위한 템플릿도 제공합니다. 그리고 친구들. 이러한 템플릿은 내장 연산자가 잘 정의된 동작을 제공하지 않는 경우에도 모든 포인터 유형에 대한 전체 순서를 보장합니다.

위 내용은 C의 포인터를 비교할 때 항등 연산자와 관계 연산자는 얼마나 신뢰할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿