swap.c : enteros y cadenas
A veces el tema de los punteros en c se puede convertir en una pesadilla, pero lo cierto es que no es tan complicado teniendo las ideas claras.
Para empezar, un array de caracteres que se pasa como argumento a una función, no es un paso de parametro por valor, y si se modifica, al retornar de la función los cambios estarán ahí.
Y en el caso de un swap de enteros, se pasan los parametros por referencia con el operador &. En una entrada anterior en el codeblog puse un swap de cadenas muy complicado, creo que este es más elegante.
Para empezar, un array de caracteres que se pasa como argumento a una función, no es un paso de parametro por valor, y si se modifica, al retornar de la función los cambios estarán ahí.
Y en el caso de un swap de enteros, se pasan los parametros por referencia con el operador &. En una entrada anterior en el codeblog puse un swap de cadenas muy complicado, creo que este es más elegante.
/**
* swap.c
* Implementa dos versiónes de la función swap, una para intercambiar enteros
* y la otra para intercambiar arrays
* Compilacion: gcc -o swap swap.c
*
* Pello Xabier Altadill Izura
*/
#include <stdio.h>
void swap(int *px, int *py);
void swaps(char a[], char b[]);
main ()
{
int valor1 = 666;
int valor2 = -34;
char cadena1[] = "Esta es la primera cadena";
char cadena2[] = "Esta es la segunda cadena";
printf("Antes: valor1:%d y valor2: %d
", valor1, valor2);
/* Atención, los parametros deben ser las direcciones */
swap(&valor1, &valor2);
printf("Despues: valor1:%d y valor2: %d
", valor1, valor2);
printf("Antes: cadena1:%s y cadena2: %s
", cadena1, cadena2);
/* Atención, los parametros deben ser las direcciones */
swaps(cadena1, cadena2);
printf("Despues: cadena1:%s y cadena2: %s
", cadena1, cadena2);
}
/* Implementación de SWAP */
void swap (int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
/* Implementacion de swaps */
void swaps(char a[], char b[])
{
int i;
char tmp[2048];
/* En el mismo array vamos asignando */
for (i=0;(tmp[i]=a[i]) != ' ';i++);
/* Y despues le metemos el final */
tmp[i]=' ';
for (i=0;(a[i]=b[i]) != ' ';i++);
/* Y despues le metemos el final */
a[i]=' ';
for (i=0;(b[i]=tmp[i]) != ' ';i++);
/* Y despues le metemos el final */
b[i]=' ';
}