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.
Folha de consulta
Para passar por referência em C++, 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
}A passagem por referência permite que as funções trabalhem diretamente com as variáveis originais em vez de cópias. As alterações feitas nos parâmetros dentro da função modificarão as variáveis originais que foram passadas.
Isso elimina a sobrecarga de copiar dados, tornando os programas mais rápidos e eficientes em termos de memória, especialmente com estruturas de dados complexas como vetores ou mapas.
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