Elementos de un Array - Punteros
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 8 de 63.
Ahora que entiendes cómo funcionan los nombres de los arreglos como punteros, puedes usar este conocimiento para acceder a los elementos del arreglo de una manera completamente diferente. En lugar de usar la conocida notación de corchetes como array[i], puedes usar la notación de punteros para lograr el mismo resultado.
La idea clave es que array[i] es exactamente equivalente a *(array + i). Cuando escribes array + i, le estás diciendo a C que se mueva i posiciones hacia adelante desde el inicio del arreglo. El operador de desreferencia * luego obtiene el valor en esa ubicación.
int numbers[5] = {10, 20, 30, 40, 50};
// Estas dos líneas hacen exactamente lo mismo:
printf("%d", numbers[2]); // Imprime 30
printf("%d", *(numbers + 2)); // También imprime 30Esta notación de punteros funciona porque C calcula automáticamente la dirección de memoria correcta basándose en el tamaño del tipo de dato. Cuando sumas 2 a un puntero de un arreglo de enteros, C avanza 2 × sizeof(int) bytes, aterrizando exactamente en el tercer elemento.
Comprender esta equivalencia te brinda flexibilidad en la forma en que trabajas con arreglos y te prepara para técnicas de punteros más avanzadas que encontrarás a medida que continúes aprendiendo C.
Desafío
FácilEscribe un programa en C que demuestre el acceso a los elementos de un arreglo utilizando la notación de punteros en lugar de la indexación tradicional de arreglos. Tu programa debe:
- Declarar un arreglo de enteros llamado
valuescon 6 elementos e inicializarlo con los valores {5, 15, 25, 35, 45, 55} - Usar un bucle for para iterar a través de todos los elementos del arreglo
- Dentro del bucle, usar la notación de punteros
*(values + i)para acceder a cada elemento (no uses la notación de corchetes comovalues[i]) - Imprimir cada elemento utilizando el método de acceso por notación de punteros
- Después del bucle, demostrar la equivalencia imprimiendo el tercer elemento (índice 2) utilizando ambos métodos:
- Primero usando la notación de punteros:
*(values + 2) - Luego usando la notación tradicional de arreglos:
values[2]
- Primero usando la notación de punteros:
Tu salida debe mostrar los resultados en el siguiente formato:
Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25Este desafío pone a prueba tu comprensión de la equivalencia entre array[i] y *(array + i), demostrando cómo la aritmética de punteros te permite acceder a los elementos de un arreglo utilizando cálculos de direcciones de memoria en lugar de la indexación tradicional.
Hoja de referencia
Se puede acceder a los elementos de un array utilizando la notación de punteros en lugar de la notación de corchetes. La expresión array[i] es equivalente a *(array + i).
Cuando escribes array + i, C se desplaza i posiciones hacia adelante desde el inicio del array. El operador de desreferencia * obtiene el valor en esa ubicación.
int numbers[5] = {10, 20, 30, 40, 50};
// Estas dos líneas hacen exactamente lo mismo:
printf("%d", numbers[2]); // Imprime 30
printf("%d", *(numbers + 2)); // También imprime 30C calcula automáticamente la dirección de memoria correcta basándose en el tamaño del tipo de dato. Sumar 2 al puntero de un array de enteros se desplaza hacia adelante 2 × sizeof(int) bytes.
Pruébalo tú mismo
#include <stdio.h>
int main() {
// TODO: Escribe tu código aquí
// Declarar e inicializar el arreglo 'values' con 6 elementos
// Usar un bucle for para imprimir cada elemento usando notación de puntero *(values + i)
// Después del bucle, imprimir el tercer elemento usando tanto notación de puntero como de arreglo
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