Pregunta

Soy estudiante de programación tratar de comprender mejor los punteros, una de las cosas que aprendí es que se puede establecer un puntero a NULL. Mi pregunta es, ¿cuál es la diferencia entre estas dos afirmaciones? ¿Cuándo cada uno de ellos devolver verdadero / falso?

if (some_ptr ==  NULL)

if (*some_ptr == NULL)

Gracias!

¿Fue útil?

Solución

La primera hace una comparación en contra de la dirección de la variable a null, el segundo elimina referencia el puntero, para obtener el valor contenido en él y lo compara con nula.

Otros consejos

La primera afirmación se refiere a la dirección real de la some_ptr puntero está apuntando. En caso de que sea NULL (el valor representado por el NULL definir), es verdad, de lo contrario no.

Esta última afirmación se refiere al contenido en la dirección del puntero está apuntando. Así que si usted está teniendo some_ptr punto en un entero, número entero y que pasa a ser el mismo que su nula definir, la segunda condición se evalúa como verdadera.

La primera es que está comparando el puntero contra NULL, que parece deseable.

La segunda es que usted está dereferencing primero el puntero para obtener el valor que se compara luego contra NULL, al igual que usted está comparando un valor int a 0. basado en el nombre de la variable.

La primera dice:
Es some_ptr NULL?

El segundo dice:
Es lo some_ptr está apuntando a NULL?

Por ejemplo: int * x; Aquí si quieres comprobar si los puntos x en nulo entonces usamos la primera declaración. Con las mismas int * x, si se utiliza la segunda declaración, entonces usted está tratando de eliminar la referencia al puntero y cheque por el valor de que x puntos a. Debido a NULL es 0 en C, C ++ comprueba el valor 0 que x puntos a.
EDIT:. También con la segunda declaración, si x apunta a NULL, entonces deferencing un nulo resultados puntero en una gota núcleo en UNIX

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top