Menu
Coddy logo textTech

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 30

Esta 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.

challenge icon

Desafío

Fácil

Escribe 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:

  1. Declarar un arreglo de enteros llamado values con 6 elementos e inicializarlo con los valores {5, 15, 25, 35, 45, 55}
  2. Usar un bucle for para iterar a través de todos los elementos del arreglo
  3. Dentro del bucle, usar la notación de punteros *(values + i) para acceder a cada elemento (no uses la notación de corchetes como values[i])
  4. Imprimir cada elemento utilizando el método de acceso por notación de punteros
  5. 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]

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: 25

Este 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 30

C 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;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow