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.

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 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 swap deve:
1. Guardar num temporário o valor de *x.
2. Colocar em *x o valor de *y.
3. Colocar em *y o valor que estava no temporário.

Passo 4

No main fazemos:
1. Declaramos e inicializamos x e y.
2. Imprimimos seus valores antes da troca.
3. Chamamos swap(&x, &y).
4. Imprimimos 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;
}

Exercícios relacionados