Menu
Coddy logo textTech

Nombres de Arrays como Punteros

Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 7 de 63.

Los arrays y los punteros en C tienen una relación especial que es fundamental para comprender cómo C trabaja con los datos en la memoria. Cuando declaras un array, el propio nombre del array actúa como un puntero constante al primer elemento del array.

Esto significa que cuando tienes un array como int numbers[5];, el nombre numbers es esencialmente un puntero que siempre apunta a numbers[0]. Puedes pensar en el nombre del array como un puntero integrado que no necesitas declarar por separado.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0]  // ¡Estos son equivalentes!

Esta equivalencia es crucial: numbers y &numbers[0] te proporcionan exactamente la misma dirección de memoria. El nombre del array es simplemente una forma más conveniente de referirse a la dirección del primer elemento sin tener que usar el operador de dirección.

Comprender esta relación abre la puerta al uso de técnicas de punteros con arreglos, lo que puede hacer que tu código sea más flexible y eficiente. La diferencia clave es que, a diferencia de los punteros normales, los nombres de los arreglos son punteros constantes: no puedes cambiar a qué apuntan.

challenge icon

Desafío

Fácil

Escribe un programa en C que demuestre la equivalencia entre los nombres de los arrays y los punteros a sus primeros elementos. Tu programa debe:

  1. Declarar un array de enteros llamado numbers con 4 elementos e inicializarlo con los valores {10, 20, 30, 40}
  2. Declarar un puntero a un entero llamado ptr
  3. Asignar el nombre del array numbers al puntero ptr
  4. Imprimir la dirección almacenada en numbers usando printf con el especificador de formato %p
  5. Imprimir la dirección del primer elemento &numbers[0] usando printf con el especificador de formato %p
  6. Imprimir la dirección almacenada en ptr usando printf con el especificador de formato %p
  7. Imprimir el valor del primer elemento usando el nombre del array: *numbers
  8. Imprimir el valor del primer elemento usando el puntero: *ptr

Tu salida debe mostrar los resultados con el siguiente formato:

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

Este desafío demuestra que el nombre del array actúa como un puntero constante al primer elemento, y que numbers, &numbers[0] y ptr contienen todos la misma dirección de memoria cuando ptr recibe el nombre del array.

Pruébalo tú mismo

#include <stdio.h>

int main() {
    // TODO: Escribe tu código aquí
    // 1. Declara e inicializa el array 'numbers' con {10, 20, 30, 40}
    // 2. Declara un puntero a entero llamado 'ptr'
    // 3. Asigna el nombre del array al puntero
    // 4. Imprime todas las direcciones y valores requeridos
    
    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 Lógica y Flujo

Practica por tu cuenta: Compilador de C online