Ejercicio 03 — Función swap(int *a, int *b) que intercambia dos enteros por…
Dificultad: verde · Módulo 07 (Punteros)
Enunciado
Función swap(int *a, int *b) que intercambia dos enteros por referencia.
Diagramas de flujo


Cómo se resuelve
El intercambio (swap) es el ejemplo clásico del paso por referencia. Para intercambiar dos valores necesitas modificar las dos variables del llamador, y eso solo se puede si la función recibe sus direcciones.
swap(int *a, int *b)recibe dos punteros. Dentro trabajas siempre con*ay*b(los valores), nunca conayba secas (las direcciones).- Hace falta una variable temporal:
int tmp = *a;guarda el valor de la primera antes de pisarlo. Luego*a = *b;y*b = tmp;. Sin esetmpperderías uno de los dos valores en el primer paso. - En
main, la llamada esswap(&x, &y);con los¶ pasar las direcciones.
Trampa habitual: intentar el swap sin punteros, con void swap(int a, int b). Compila, pero solo intercambia las copias locales y x e y quedan intactas. Si la salida imprime lo mismo antes y después, casi seguro olvidaste los * en la función o los & en la llamada.
Para practicar — cópialo y complétalo
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
* Curso de C — Modulo 07: Punteros
* Ejercicio 03 — PRACTICA (rellena los TODO)
* Enunciado: Función swap(int *a, int *b) que intercambia dos enteros por referencia.
* Dificultad: verde
* Compilar: gcc -std=c11 -Wall ej03_practica.c -o ej03 && ./ej03
*/
#include <stdio.h>
/*
* TODO 1: Define void swap(int *a, int *b).
* Necesitas una variable temporal 'tmp' para no perder un valor.
* Pasos: tmp = *a | *a = *b | *b = tmp
*/
int main(void) {
int x = 5, y = 20;
printf("Antes: a=%d b=%d\n", x, y);
// TODO 2: Llama a swap pasando las DIRECCIONES de x e y.
printf("Despues: a=%d b=%d\n", x, y);
return 0;
}Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 07: Punteros
* Ejercicio 03 — MODELO (resuelto)
* Enunciado: Función swap(int *a, int *b) que intercambia dos enteros por referencia.
* Dificultad: verde
* Compilar: gcc -std=c11 -Wall ej03_modelo.c -o ej03 && ./ej03
*/
#include <stdio.h>
/* Intercambia los valores de *a y *b usando una variable temporal */
void swap(int *a, int *b) {
int tmp = *a; // guardamos el valor de a
*a = *b; // a recibe el valor de b
*b = tmp; // b recibe el valor original de a
}
int main(void) {
int x = 5, y = 20;
printf("Antes: a=%d b=%d\n", x, y);
swap(&x, &y);
printf("Despues: a=%d b=%d\n", x, y);
return 0;
}Ejecútalo en el navegador
▶ Abrir y ejecutar en Compiler Explorer
Se abre con la solución ya cargada; pulsa el botón de ejecutar (Run) para ver la salida. No hay que instalar nada.
Cómo usarlo
Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.