Punteros NULL
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 5 de 63.
A veces necesitas declarar un puntero pero no tienes una dirección de memoria válida para asignarle inmediatamente. En estas situaciones, es importante inicializar el puntero con un valor especial llamado NULL.
Un puntero NULL es un puntero que no apunta a ninguna dirección de memoria válida. En C, NULL se define normalmente como 0 o (void*)0. Cuando inicializas un puntero a NULL, estás indicando explícitamente que actualmente no apunta a nada útil.
int *ptr = NULL; // Inicializa el puntero a NULL
printf("%p", ptr); // Esto imprimirá 0 o (nil)Inicializar punteros a NULL se considera una buena práctica de programación porque evita que su puntero contenga valores basura aleatorios. Un puntero no inicializado podría contener cualquier dirección de memoria aleatoria, lo que podría provocar un comportamiento impredecible si intenta usarlo accidentalmente.
Puedes comprobar si un puntero es NULL antes de usarlo, lo que ayuda a prevenir fallos y hace que tu código sea más robusto. Esta comprobación de seguridad se vuelve especialmente importante a medida que tus programas se vuelven más complejos.
Desafío
FácilEscribe un programa en C que demuestre la inicialización y comprobación adecuada de punteros NULL. Tu programa debe:
- Declarar un puntero a un entero llamado
safe_ptre inicializarlo a NULL - Declarar un puntero a un carácter llamado
char_ptre inicializarlo a NULL - Comprobar si
safe_ptres NULL usando una sentencia if e imprimir "safe_ptr is NULL" si lo es - Comprobar si
char_ptres NULL usando una sentencia if e imprimir "char_ptr is NULL" si lo es - Imprimir la dirección de memoria almacenada en
safe_ptrusandoprintfcon el especificador de formato%p - Imprimir la dirección de memoria almacenada en
char_ptrusandoprintfcon el especificador de formato%p
Tu salida debe mostrar los resultados en el siguiente formato:
safe_ptr is NULL
char_ptr is NULL
safe_ptr address: [address]
char_ptr address: [address]Las direcciones de memoria reales se mostrarán como 0, (nil), o una representación NULL similar dependiendo de tu sistema, pero el formato y las etiquetas deben coincidir exactamente como se muestra arriba.
Hoja de referencia
Un puntero NULL es un puntero que no apunta a ninguna dirección de memoria válida. En C, NULL se define normalmente como 0 o (void*)0.
Inicialice los punteros a NULL para evitar valores de basura aleatorios:
int *ptr = NULL; // Inicializar puntero a NULL
printf("%p", ptr); // Esto imprimirá 0 o (nil)Compruebe si un puntero es NULL antes de usarlo para evitar bloqueos:
if (ptr == NULL) {
// Es seguro manejar el caso NULL
}Pruébalo tú mismo
#include <stdio.h>
int main() {
// TODO: Escribe tu código aquí
// Declara e inicializa tus punteros
// Verifica si los punteros son NULL
// Imprime la salida requerida
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas