Comparação de Ponteiros
Dois valores de ponteiro são considerados iguais se apontam para a mesma localização, ou se ambos são nulos. Você pode testar isso com os operadores ==
e !=
. Aqui está um exemplo simples:
{
int i;
int *p, *q;
p = &i;
q = &i;
if (p == q)
printf("Isso será impresso.\n");
if (p != q)
printf("Isso não será impresso.\n");
}
Comparações de ordenação, como >
e >=
, operam sobre ponteiros convertendo-os para inteiros sem sinal. O padrão da linguagem C diz que os dois ponteiros devem apontar para dentro do mesmo objeto na memória. No entanto, em sistemas GNU/Linux, essas operações simplesmente comparam os valores numéricos dos ponteiros.
Em princípio, os ponteiros comparados devem ter o mesmo tipo, mas diferenças são permitidas em alguns casos limitados:
Se os tipos apontados pelos dois ponteiros forem quase compatíveis (veja ), a comparação é permitida.
Se um dos operandos for do tipo
void *
(veja Ponteiros para void) e o outro for um ponteiro de outro tipo, o operador de comparação converte o ponteirovoid *
para o tipo do outro operando, para que possam ser comparados.Obs.: Em C padrão, isso não é permitido se o outro tipo for ponteiro para função, mas no GNU C isso funciona.
Os operadores de comparação também permitem comparar o número inteiro 0
com um valor de ponteiro. Nesse caso, o 0
é convertido para um ponteiro nulo do mesmo tipo do outro operando.
Atualizado
Isto foi útil?