AprenderC
← Todas las lecciones

Moverse de cajita en cajita

Sumarle uno a una dirección te lleva a la cajita siguiente.

1Por qué

Queda una pieza, y es la que amarra todo lo anterior.

El nombre de un arreglo es la dirección de su primera cajita. Por eso int *p = a; funciona sin &: a ya es una dirección.

Y aquí viene lo que confunde a todo el mundo. p + 1 no suma uno: suma una cajita entera. Si son enteros de cuatro bytes, avanza cuatro. C puede hacerlo porque sabe a qué tipo apunta p — por eso un puntero siempre lleva su tipo pegado, y por eso char * y int * no se mueven igual.

De ahí sale algo que parece magia y no lo es: *(p + 2) y a[2] son exactamente lo mismo. Los corchetes son una forma corta de escribir esa suma. Por dentro, C hace lo mismo en los dos casos.

Cuando esto se te haga natural, ya sabes lo que la mayor parte del curso viene a enseñar.

2Míralo andar

Este programa funciona. Léelo, y después ejecútalo sin cambiar nada.

#include <stdio.h>
int main(void)
{
int a[3] = {7, 8, 9};
int *p = a;
printf("%d\n", *p);
printf("%d\n", *(p + 1));
printf("%d\n", a[1]);
return 0;
}

3Ahora tú

Haz que el programa escriba: 10 30

#include <stdio.h>
int main(void)
{
int a[4] = {10, 20, 30, 40};
int *p = a;
printf("%d %d\n", /* Escribe tu orden aquí */);
return 0;
}

Ejecutar

Lo que dice tu programa

↖︎ Escribe tu parte y dale a Ejecutar

Qué pasó

Aquí te aviso si tu programa hace algo raro.

    4Qué guarda tu programa

    Memoria

    ↖︎ Ejecuta el programa para ver qué pasa por dentro