BUSCAR
INICIO
MAPA
FAQs
UTILIDADES
GLOSARIO
REGISTRO
COLABORAR
QUIENES SOMOS

USUARIO

PASSWORD

FAQs
6. Punteros

8. ¿Es la siguiente comparación de un puntero " if (p) " correcta para ver si es nulo? ¿Qué sucede si la representación interna para punteros nulos es distinta de 0?

Cuando C requiere el valor booleano de una expresión, infiere un valor falso cuando la expresión comparada es igual a cero, y verdadero valor en caso contrario. Es decir siempre que uno escribe
 
if (expr)

donde "expr" es cualquier expresión, el compilador basicamente actúa como si se hubiese escrito

if ((expr)! = 0)
 
Por lo tanto

if (p) es equivalente a if(p! = 0)
 
Como hemos explicado en la pregunta anterior, cuando el compilador necesita comparar un puntero y un valor 0, interpreta ese 0 como un puntero nulo, con lo cual, la expresión es perfectamente correcta.

Esta es la forma de trabajar de todos los compiladores, independientemente de la representación interna que hagan de puntero nulo.
 
Otro aspecto distinto, es la opinión que existe sonbre el uso de este tipo de abreviaturas, consideradas por algunos muy utiles, y por otros, poco claras.
.