Comparando ponteiros usando operadores relacionais
Quando dois ponteiros para objetos do mesmo tipo são comparados, o resultado é determinado pela localização dos objetos apontado no espaço de endereço do programa.Ponteiros também podem ser comparados a uma expressão de constante que é avaliada como 0 ou um ponteiro de tipo void *.Se uma comparação de ponteiro é feita contra um ponteiro de tipo void *, o outro ponteiro é implicitamente convertido no tipo void *.Em seguida, a comparação é feita.
Dois ponteiros de tipos diferentes não podem ser comparados a menos que:
Um tipo é um tipo de classe derivado de outro tipo.
Pelo menos um dos ponteiros de explicitamente é convertido (cast) para digitar void *.(O ponteiro outro implicitamente é convertido no tipo void * para a conversão.)
Dois ponteiros do mesmo tipo que apontam para o mesmo objeto são garantidos para comparar igual.Se forem comparados dois ponteiros para os membros não estático de um objeto, as seguintes regras se aplicam:
Se o tipo de classe não é uma união e se os dois membros não são separados por um especificador de acesso, como public, protected ou particular, o ponteiro para o membro declarado pela última vez irá comparar maior do que o ponteiro para o membro declarado anteriormente.(Para obter informações sobre especificador de acesso, consulte a seção de sintaxe no Especificadores de acesso.)
Se os dois membros são separados por um especificador de acesso, os resultados são indefinidos.
Se o tipo de classe é uma união, ponteiros para os membros de dados diferentes nessa união comparam como iguais.
Se dois ponteiros apontem para elementos da matriz mesmo ou para o elemento além do fim da matriz, o ponteiro para o objeto com a maior subscrição compara superior.Comparação dos ponteiros é garantida válida somente quando os ponteiros se referem a objetos no mesmo array ou para o local após o final da matriz.