C++ Passagem por Referência: Usando Ponteiros – Exemplos Práticos
C++ Passagem por Referência: Usando Ponteiros – Exemplos Práticos
Este guia explica como passar argumentos por referência em C++ usando ponteiros, com exemplos de código claros que demonstram a troca de valores e muito mais.
No mundo das funções C++, a maneira padrão de passar dados é por valor: a função recebe uma cópia dos dados originais. Embora isso proteja a variável original, pode ser ineficiente para objetos grandes e impede que a função modifique os dados do chamador.
A passagem por referência resolve ambos os problemas. Em vez de copiar os dados, a função recebe uma referência (ou endereço) à variável original, permitindo manipulação direta. Isso é alcançado de duas formas equivalentes: usando referências C++ ou ponteiros brutos. Entender ambas as abordagens dá flexibilidade e visão mais profunda sobre o gerenciamento de memória.
// Função que recebe um valor void func1(int numVal) { // código } // Função que recebe uma referência (sintaxe de referência C++) void func2(int &numRef) { // código } int main() { int num = 5; // Passagem por valor func1(num); // Passagem por referência func2(num); return 0; }
O & em void func2(int &numRef) indica que o parâmetro é uma referência. Quando func2 é chamado, o endereço de num é passado, não seu valor, permitindo que a função modifique num diretamente.

Exemplo 1: Troca de Valores com Referências C++
#include <iostream> using namespace std; // Função de troca usando referências void swap(int &n1, int &n2) { int temp = n1; n1 = n2; n2 = temp; } int main() { int a = 1, b = 2; cout << "Antes da troca\n"; cout << "a = " << a << "\n"; cout << "b = " << b << "\n"; swap(a, b); cout << "\nDepois da troca\n"; cout << "a = " << a << "\n"; cout << "b = " << b << "\n"; return 0; }
Saída
Antes da troca a = 1 b = 2 Depois da troca a = 2 b = 1
Neste exemplo, swap recebe duas referências. Como n1 e n2 são aliases para a e b, as mudanças dentro da função afetam as variáveis originais.
Exemplo 2: Troca de Valores com Ponteiros
#include <iostream> using namespace std; // Protótipo da função usando ponteiros void swap(int*, int*); int main() { int a = 1, b = 2; cout << "Antes da troca\n"; cout << "a = " << a << "\n"; cout << "b = " << b << "\n"; // Passar endereços de a e b swap(&a, &b); cout << "\nDepois da troca\n"; cout << "a = " << a << "\n"; cout << "b = " << b << "\n"; return 0; } // Função de troca usando ponteiros void swap(int* n1, int* n2) { int temp = *n1; *n1 = *n2; *n2 = temp; }
Saída
Antes da troca a = 1 b = 2 Depois da troca a = 2 b = 1
Aqui, swap aceita ponteiros brutos. Ao desreferenciar com *, a função acessa e modifica os valores nos endereços fornecidos. O resultado é idêntico à versão com referências, mas a sintaxe de ponteiros torna a passagem de endereços explícita.
A escolha entre referências e ponteiros depende do contexto: referências oferecem sintaxe mais segura e limpa, enquanto ponteiros fornecem controle explícito sobre endereços de memória e são necessários para alocação dinâmica.
Linguagem C
- Dominando Declarações Using em C#: Imports, Aliases e Diretivas Estáticas
- Dominando Operadores em C++: Guia Completo com Exemplos Práticos
- Comentários em C++: Boas Práticas para Código Legível e Manutenível
- Dominando Templates de Classe em C++: Um Guia Prático
- Dominando Ponteiros em C: Um Tutorial Prático e Guiado por Especialistas
- Dominando Ponteiros em C++: Conceitos, Exemplos e Aplicações Práticas
- 13 Tipos de Malware em 2021: Ameaças, Exemplos e Prevenção
- 5 Modelos de Data Center Explicados: Design, Casos de Uso e Exemplos
- Explorando 8 Tendências Tecnológicas-Chave de 2021 com Exemplos do Mundo Real
- Dominando Ponteiros em C: Passos Práticos para Programação Avançada