객체 동등성을 위한 포인터 비교
예제와 같이 동일한 변수를 참조하는 포인터를 비교할 때:
int *a = something; int *b = something;
항등 연산자 "a == b"가 예상한 결과를 제공하는지 여부에 대한 의문이 생깁니다.
항등 연산자(==, !=)
C 표준에 따르면 동일한 유형의 포인터는 다음과 같이 동일한지 비교할 수 있습니다.
관계 연산자(<, >, < ;=, >=)
포인터에 대한 관계 연산자는 동일한 유형의 객체 또는 함수에 대한 포인터에 대해서만 정의됩니다. 결과는 포인터가 동일한 개체나 함수를 가리키는지, 아니면 둘 중 하나가 null인지 여부에 따라 달라집니다.
예를 들어 배열의 경우 서로 다른 요소에 대한 포인터는 서로 비교하여 크거나 작습니다. 배열에서의 위치를 기반으로 합니다. 그러나 배열이 아닌 객체나 동일한 객체의 멤버가 아닌 함수에 대한 포인터를 비교하면 지정되지 않은 결과가 나올 수 있습니다.
가상 함수에 대한 예외
다음 중 하나의 경우 포인터가 가상 멤버 함수를 가리키면 비교 결과는 표준에 의해 지정되지 않습니다.
실습 비교
등등을 사용한 포인터 비교에 유의해야 합니다. 연산자(==, !=)는 일반적으로 잘 정의되어 있으며 포인터가 동일한 개체를 가리키는지 확인하는 데 신뢰할 수 있습니다. 그러나 관계 연산자(<, >, <=, >=)는 특정 상황에 따라 동작이 다를 수 있으므로 주의해서 사용해야 합니다.
보너스: 다음과 비교 템플릿
표준 라이브러리는 std::less<>와 같은 포인터 비교를 위한 템플릿도 제공합니다. 그리고 친구들. 이러한 템플릿은 내장 연산자가 잘 정의된 동작을 제공하지 않는 경우에도 모든 포인터 유형에 대한 전체 순서를 보장합니다.
위 내용은 C의 포인터를 비교할 때 항등 연산자와 관계 연산자는 얼마나 신뢰할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!