Fácil C++

Troca de valores usando referências

Enunciado

Escreva uma função void trocar(int& a, int& b) que troca os valores de duas variáveis inteiras usando referências. No main, declare duas variáveis, chame a função e imprima os valores antes e depois da troca.

Requisitos

  • A função trocar deve receber dois parâmetros por referência (int&).
  • A função deve trocar os valores sem usar ponteiros.
  • O main deve imprimir os valores antes e depois da troca.

Código inicial

#include <iostream>

// TODO: implemente a função trocar

int main() {
    int x = 5, y = 10;
    std::cout << "Antes: x = " << x << ", y = " << y << '\n';
    // TODO: chame trocar(x, y)
    std::cout << "Depois: x = " << x << ", y = " << y << '\n';
    return 0;
}

Saída esperada

Antes: x = 5, y = 10
Depois: x = 10, y = 5
Ver dica

Dentro da função, use uma variável temporária para armazenar um dos valores antes de sobrescrevê-lo.

Mostrar solução
#include <iostream>

// Troca os valores usando referências
void trocar(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    int x = 5, y = 10;
    std::cout << "Antes: x = " << x << ", y = " << y << '\n';
    trocar(x, y);
    std::cout << "Depois: x = " << x << ", y = " << y << '\n';
    return 0;
}

Passo a passo

  1. A função trocar recebe dois parâmetros por referência (int& a, int& b), então a e b são apelidos para as variáveis originais.
  2. Dentro da função, criamos uma variável temporária temp para guardar o valor de a.
  3. Atribuímos b a a, sobrescrevendo o valor original de a.
  4. Atribuímos temp (o valor antigo de a) a b, completando a troca.
  5. No main, chamamos trocar(x, y), passando as variáveis diretamente (sem &).
  6. Como os parâmetros são referências, as alterações afetam x e y originais.

Por que funciona

A passagem por referência faz com que a e b sejam alias para x e y. Qualquer modificação em a ou b reflete diretamente nas variáveis originais. Isso evita o uso de ponteiros e torna o código mais limpo e seguro.

Erros comuns

  • Esquecer o & na declaração dos parâmetros: void trocar(int a, int b) faz uma cópia e não altera as variáveis originais. O resultado seria x = 5, y = 10 após a chamada.
  • Tentar trocar sem variável temporária: a = b; b = a; perde o valor original de a. É necessário guardar um dos valores antes de sobrescrevê-lo.
  • Passar constantes para a função: trocar(5, 10) não compila, pois referências não constantes não podem se ligar a temporários.

Outra forma de resolver

Usar std::swap da biblioteca padrão:

#include <utility>
void trocar(int& a, int& b) {
    std::swap(a, b);
}

Essa é a forma preferível em código real, pois é testada e otimizada.

Saída esperada

Antes: x = 5, y = 10
Depois: x = 10, y = 5