Em C, normalmente uma função só pode retornar um único valor. Isso impede que códigos como o mostrado abaixo funcionem em C :
#include <stdio.h>
#include <stdlib.h>
int swap(int x, int y)
{
return y, x // Não pode retornar 2 valores :(
}
int main()
{
int x = 1;
int y = 2;
printf("x = %d, y = %d\n", x, y);
x, y = troca(x, y) // BUG
printf("x = %d, y = %d\n", x, y);
return 0;
}
Sabendo disso, você se interessou por uma operação muito específica chamada ‘swap’. A operação ‘swap’ recebe dois ponteiros de inteiros e troca os seus valores. Isto é, se você tem um int *x e int *y, o valor original de x deve ser armazenado em y e o valor original de y deve ser armazenado em x. Use os ponteiros para acessar os endereços de memória e efetue a troca. Implemente um algoritmo que printa duas variáveis x e y antes da troca, efetua o swap e depois printa as mesmas variáveis x e y após a troca.
#include <stdio.h>
#include <stdlib.h>
int swap(int x, int y)
{
return y, x // Não pode retornar 2 valores :(
}
int main()
{
int x = 1;
int y = 2;
printf("x = %d, y = %d\n", x, y);
x, y = troca(x, y) // BUG
printf("x = %d, y = %d\n", x, y);
return 0;
}
Passo 1
O enunciado pede para implementar em C uma função
swap
que recebe dois ponteiros para int
e troca os valores apontados por eles. Como uma função em C só retorna um valor, usamos ponteiros para que a própria função modifique as variáveis originais na memória.Passo 2
Para isso precisamos entender como acessar e alterar o valor que está em um endereço de memória:
– Se
– Logo, atribuir a
– Se
x
é do tipo int *
, então *x
é o int
que vive no endereço guardado em x
.– Logo, atribuir a
*x
muda o valor da variável original.Passo 3
A função
. Guardar num temporário o valor de
. Colocar em
. Colocar em
swap
deve:*x
.*x
o valor de *y
.*y
o valor que estava no temporário.Passo 4
No
. Declaramos e inicializamos
. Imprimimos seus valores antes da troca.
. Chamamos
. Imprimimos
main
fazemos:x
e y
.swap(&x, &y)
.x
e y
depois da troca.Resposta
#include <stdio.h>
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int x = 1;
int y = 2;
printf("Antes do swap: x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("Depois do swap: x = %d, y = %d\n", x, y);
return 0;
}