Declaración de punteros
Parte de la sección Lógica y Flujo 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 puntero 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 los punteros a NULL si todavía no apuntan a una dirección 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 a qué tipo de datos apuntará el puntero. Esto es importante porque los distintos tipos de datos ocupan diferentes cantidades de espacio en la memoria, y el compilador necesita conocer esta información para gestionar correctamente la memoria.
Desafío
Fácil- Declarar un puntero a un entero llamado
int_ptr, inicializado aNULL - Declarar un puntero a un carácter llamado
char_ptr, inicializado aNULL - Declarar un puntero a un número flotante llamado
float_ptr, inicializado aNULL - Imprimir las direcciones de memoria almacenadas en cada puntero usando
printfcon el especificador de formato%p. Al imprimir, convierte el puntero a(void*)para garantizar el formato correcto, por ejemplo:printf("Label: %p\n", (void*)ptr);
Tu salida debe mostrar las tres direcciones de los punteros con 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 con los mostrados 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 Lógica y Flujo
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 cadenasPractica por tu cuenta: Compilador de C online