AprenderC
← Todas las lecciones

Intercambiar dos valores

Puedes guardar dónde vive una cajita, no solo lo que tiene dentro.

1Por qué

Hasta ahora tus funciones reciben un número y entregan otro. Ahora viene el problema que hace que C se sienta distinto de todo lo que has visto.

Escribe una función que intercambie dos números y no va a funcionar. No porque la escribas mal: porque una función recibe copias. Le pasas x, ella trabaja con su propia copia, la cambia, y al terminar la copia desaparece. Tu x sigue igual que antes.

Para cambiar el original hay que decirle dónde está. Y para eso hace falta una idea nueva.

Cada cajita vive en algún sitio de la memoria, y ese sitio tiene un número que lo identifica: su dirección, como el número de una casa. &x significa «la dirección de x».

Un puntero es una cajita que en vez de guardar un número guarda una dirección. int *p se lee «p apunta a un entero». Y *p significa «entra ahí»: leer *p es leer la cajita apuntada, y cambiar *p la cambia de verdad, aunque nunca escribas su nombre.

Aquí es donde se cae mucha gente, y casi siempre por lo mismo: confundir & con *. & saca la dirección de algo. * entra en la dirección que un puntero tiene guardada. Uno va y el otro viene.

Al ejecutar, los punteros no muestran un número: muestran una flecha roja con el nombre de la cajita a la que apuntan. En este taller el rojo significa siempre eso — algo que apunta a otra cosa.

2Míralo andar

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

#include <stdio.h>
void poner_en_cero(int *p)
{
*p = 0;
}
int main(void)
{
int x = 7;
poner_en_cero(&x);
printf("x=%d\n", x);
return 0;
}

3Ahora tú

Completa intercambiar para que x e y terminen cambiadas. Son tres líneas

#include <stdio.h>
void intercambiar(int *a, int *b)
{
/* Escribe tu orden aquí */
}
int main(void)
{
int x = 1;
int y = 2;
intercambiar(&x, &y);
printf("x=%d y=%d\n", x, y);
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