Puntero NULL en C A un nivel muy alto, podemos pensar en NULL como un puntero nulo que se usa en C para varios propósitos. Algunos de los casos de uso más comunes para NULL son
- Para inicializar una variable de puntero cuando esa variable de puntero aún no tiene asignada ninguna dirección de memoria válida.
C
int* pInt = NULL;
- Para comprobar si hay un puntero nulo antes de acceder a cualquier variable de puntero. Al hacerlo, podemos realizar el manejo de errores en el código relacionado con el puntero, por ejemplo, desreferenciar la variable del puntero solo si no es NULL.
C
if (pInt != NULL) /*We could use if(pInt) as well*/ { /*Some code*/ } else { /*Some code*/ }
- Para pasar un puntero nulo a un argumento de función cuando no queremos pasar ninguna dirección de memoria válida.
C
int fun(int* ptr) { /*Fun specific stuff is done with ptr here*/ return 10; } fun(NULL);
Puntero a un puntero nulo Como el puntero nulo siempre apunta a nulo, uno pensaría que el puntero a un puntero nulo no es válido y no será compilado por el compilador. Pero este no es el caso. Considere el siguiente ejemplo:
C++
#include <iostream> using namespace std; int main() { // Null pointer char* np = NULL; // Pointer to null pointer char** pnp = &np; if (*pnp == NULL) { cout << "Pointer to a null pointer is valid" << endl; } else { cout << "Pointer to a null pointer is invalid" << endl; } return 0; } // This code is contributed by sarajadhav12052009
C
#include <stdio.h> int main() { // Null pointer char* np = NULL; // Pointer to null pointer char** pnp = &np; if (*pnp == NULL) { printf("Pointer to a null pointer is valid\n"); } else { printf("Pointer to a null pointer is invalid\n"); } return 0; }
No solo este programa compila sino que se ejecuta con éxito para dar la salida como Salida:
Pointer to a null pointer is valid
Explicación: Lo que sucede aquí es que cuando se crea un puntero nulo, apunta a nulo, sin ninguna duda. Pero la variable del puntero nulo requiere algo de memoria. Por lo tanto, cuando se crea un puntero a un puntero nulo, apunta a un espacio de memoria real, que a su vez apunta a nulo. Por lo tanto, el puntero a un puntero nulo no solo es un concepto válido sino importante.