Partilhar via


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.

Consulte também

Referência

Expressões com operadores binários