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
trocardeve receber dois parâmetros por referência (int&). - A função deve trocar os valores sem usar ponteiros.
- O
maindeve 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
- A função
trocarrecebe dois parâmetros por referência (int& a, int& b), entãoaebsão apelidos para as variáveis originais. - Dentro da função, criamos uma variável temporária
temppara guardar o valor dea. - Atribuímos
baa, sobrescrevendo o valor original dea. - Atribuímos
temp(o valor antigo dea) ab, completando a troca. - No
main, chamamostrocar(x, y), passando as variáveis diretamente (sem&). - Como os parâmetros são referências, as alterações afetam
xeyoriginais.
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 seriax = 5, y = 10após a chamada. - Tentar trocar sem variável temporária:
a = b; b = a;perde o valor original dea. É 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