Porównywanie wskaźników przy użyciu operatorów relacyjnych
Gdy dwa wskaźniki do obiektów tego samego typu są porównywane, wynik zależy od lokalizacji obiektów wskazywanych w przestrzeni adresowej programu.Wskaźniki można również porównać do stałego wyrażenia, które jest szacowane na 0 lub na wskaźnik do typu void *.Jeżeli wskaźnik jest porównywany z wskaźnikiem typu void *, drugi wskaźnik jest niejawnie konwertowany na typ void *.Następnie dokonywane jest porównanie.
Nie można porównać dwóch wskaźników różnego typu, chyba że:
Jeden typ to typ klasy pochodzącej z drugiego typu.
Co najmniej jeden ze wskaźników jest jawnie konwertowany (rzutowany) na typ void *. (Drugi wskaźnik jest niejawnie konwertowany na typ void * do konwersji).
Wynik porównania dwóch wskaźników tego samego typu, które wskazują ten sam obiekt zawsze będzie równy.Jeżeli porównywane są dwa wskaźniki do niestatycznych elementów członkowskich obiektu, obowiązują następujące zasady:
Jeśli typem klasy nie jest związek, a dwa elementy członkowskie nie są rozdzielone specyfikatorem dostępu, takim jak public, protected lub private, ostatnio zadeklarowany wskaźnik do elementu członkowskiego da większy wynik porównania niż wskaźnik do elementu członkowskiego zadeklarowany wcześniej. (Aby uzyskać informacje dotyczące specyfikatora dostępu, zobacz sekcję składni w artykule Specyfikatory dostępu).
Jeśli dwa elementy członkowskie są rozdzielone specyfikatorem dostępu, wyniki są niezdefiniowane.
Jeśli typem klasy jest związek, wskaźniki do różnych danych członkowskich w tym związku są sobie równe.
Jeśli dwa wskaźniki wskazują elementy tej samej tablicy lub na pierwszy element poza tablicą, wskaźnik do obiektu z wyższym indeksem dolnym daje większy wynik porównania.Porównanie wskaźników jest gwarantowane jako prawidłowe tylko wtedy, gdy wskaźniki odnoszą się do obiektów w jednej tablicy lub do pierwszej lokalizacji poza tablicą.