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.
.