Declaración de punteros
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 2 de 63.
Ahora que entiendes qué son los pointers, aprendamos cómo crearlos. Declarar una variable pointer sigue una sintaxis específica que le indica al compilador a qué tipo de datos apuntará el pointer.
La sintaxis básica para declarar un pointer es: data_type *pointer_name;
int *ptr; // Declara un puntero a un entero
char *ch_ptr; // Declara un puntero a un carácter
float *f_ptr; // Declara un puntero a un floatEl asterisco (*) es lo que hace que esta sea una declaración de puntero. Le dice al compilador que esta variable almacenará una dirección de memoria, no el valor de datos real. Cuando declaras int *ptr;, estás diciendo "ptr es un puntero que puede almacenar la dirección de una variable de tipo entero".
Es una buena práctica inicializar pointers a NULL si aún no están apuntando a una address de memoria válida. Esto evita que apunten a ubicaciones de memoria aleatorias: int *ptr = NULL;
Al imprimir direcciones de pointer usando printf, usa el especificador de formato %p. A menudo se recomienda moldear el pointer a (void *) para garantizar la compatibilidad y el formato correcto: printf("%p", (void *)ptr);
Observa que el tipo de datos antes del asterisco especifica qué tipo de datos apuntará el pointer. Esto es importante porque los diferentes tipos de datos ocupan distintas cantidades de espacio en memoria, y el compilador necesita saber esta información para una gestión de memoria adecuada.
Desafío
Fácil- Declarar un puntero a un entero llamado
int_ptr, inicializado enNULL - Declarar un puntero a un carácter llamado
char_ptr, inicializado enNULL - Declarar un puntero a un float llamado
float_ptr, inicializado enNULL - Imprimir las direcciones de memoria almacenadas en cada puntero usando
printfcon el especificador de formato%p. Al imprimir, convierte (cast) el puntero a(void*)para asegurar el formato correcto, por ejemplo:printf("Label: %p\n", (void*)ptr);
Tu salida debe mostrar las tres direcciones de puntero en el siguiente formato:
Integer pointer: [address]
Character pointer: [address]
Float pointer: [address]Ten en cuenta que las direcciones de memoria reales variarán, pero el formato y las etiquetas deben coincidir exactamente como se muestra arriba.
Pruébalo tú mismo
#include <stdio.h>
int main() {
// TODO: Declara tus punteros aquí
// TODO: Imprime las direcciones de los punteros usando el formato requerido
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