Passagem por Referência
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 41 de 56.
Quando você passa argumentos para funções, o C++ normalmente cria cópias dos valores. Isso significa que alterações dentro da função não afetam as variáveis originais. A passagem por referência altera esse comportamento, permitindo que as funções trabalhem diretamente com as variáveis originais.
Para passar por referência, adicione o símbolo & após o tipo do parâmetro na declaração da sua função:
void doubleValue(int& number) {
number = number * 2; // Modifica a variável original
}Quando você chama esta função, quaisquer alterações feitas no parâmetro dentro da função modificarão diretamente a variável original que foi passada. Isso é particularmente útil quando você deseja que uma função modifique seus argumentos ou ao trabalhar com objetos grandes onde a cópia seria ineficiente.
A passagem por referência elimina a sobrecarga de copiar dados, tornando seus programas mais rápidos e eficientes em termos de memória, especialmente com estruturas de dados complexas como vetores ou mapas.
Desafio
FácilCrie uma função que demonstre a passagem por referência modificando variáveis diretamente através dos parâmetros da função. Este desafio testará sua compreensão de como o símbolo & permite que as funções trabalhem com as variáveis originais em vez de cópias.
As seguintes entradas serão fornecidas:
- Um número inteiro
value1representando o primeiro número - Um número inteiro
value2representando o segundo número - Um número inteiro
value3representando o terceiro número
Seu programa deve:
- Criar uma função chamada
tripleValuesque recebe três parâmetros inteiros por referência - Dentro da função, multiplicar cada parâmetro por 3
- Na função principal, ler os três valores de entrada e armazená-los em variáveis
- Imprimir os valores originais antes de chamar a função
- Chamar a função
tripleValuescom as três variáveis - Imprimir os valores modificados após a chamada da função para mostrar que eles foram alterados
Use o seguinte formato de saída exato:
Antes da chamada da função:
Original values: [value1] [value2] [value3]Após a chamada da função:
Tripled values: [new_value1] [new_value2] [new_value3]A assinatura da função deve usar o símbolo & após cada tipo de parâmetro para indicar a passagem por referência: void tripleValues(int& a, int& b, int& c). Isso permite que a função modifique diretamente as variáveis originais passadas para ela, demonstrando a diferença fundamental entre passagem por valor e passagem por referência. As variáveis na função principal serão alteradas permanentemente após a chamada da função, provando que a função trabalhou com os locais de memória originais em vez de cópias.
Experimente você mesmo
#include <iostream>
using namespace std;
// TODO: Crie a função tripleValues aqui
int main() {
// Ler os valores de entrada
int value1, value2, value3;
cin >> value1 >> value2 >> value3;
// Imprime os valores originais
cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
// TODO: Chame a função tripleValues aqui
// Imprime os valores modificados
cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros4Mapas (Pares Chave-Valor)
Introdução ao std::mapCriando um MapaAcessando e Modificando ValoresVerificando ChavesRemovendo ParesIterando sobre um MapaRecapitulação - Frequência de Palavras7Funções Avançadas
Passagem por ReferênciaIntrodução a Expressões LambdaLambdas com ParâmetrosLambdas com Valores de RetornoIntrodução à RecursãoFatorial RecursivoOrdenação com Lambda2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa