Passagem de Argumentos por Valor/Ponteiro/Referência
Deslize para mostrar o menu
Passagem por valor
Variáveis criadas dentro de uma função são acessíveis apenas dentro dessa função. Essa regra também se aplica ao passar argumentos. Os parâmetros na assinatura da função possuem escopo local e são passados por valor, o que significa que seus valores são copiados para a função e armazenados em variáveis separadas (semelhante a pegar um livro emprestado na biblioteca em vez de levar o original).
main.cpp
1234567891011121314151617181920#include <iostream> // Function that takes an argument by value void modify(int num) { // Modify the parameter (local copy of the argument) num = num * 2; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass 'number' by value modify(number); // Varibale in the main function remains unchanged std::cout << "After function call: " << number << std::endl; }
Passagem por ponteiro
Passar argumentos por valor nem sempre é eficiente. Copiar valores utiliza memória extra e, em alguns casos, uma função precisa modificar a variável original diretamente. Nesses casos, é melhor passar a variável por ponteiro, o que significa enviar seu endereço de memória em vez do valor. Isso é feito utilizando o operador de ponteiro (*) nos parâmetros da função.
main.cpp
1234567891011121314151617181920212223#include <iostream> // Function that takes an argument using pointer void modify(int* p_num) { // Modify the value at the memory address pointed by `p_num` // '*' is used to extract the value from the address (pointer) *p_num = (*p_num) * 2; std::cout << "Inside function: " << *p_num << std::endl; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass the address of 'number' using a pointer // '&' is used to get an address of the variable modify(&number); // 'number' in the main function is modified through the pointer std::cout << "After function call: " << number << std::endl; }
Passagem por referência
Passagem por referência significa fornecer a uma função acesso direto à memória de uma variável, permitindo que ela modifique o valor original sem usar o operador de desreferência (*).
A passagem por referência utiliza o operador & nos parâmetros da função. Funciona de forma semelhante à passagem por ponteiro, mas com duas diferenças principais:
- Não é necessário usar
*para acessar a variável dentro da função. - Não é necessário usar
&ao chamar a função, apenas em sua declaração.
main.cpp
1234567891011121314151617181920#include <iostream> // Function that takes an argument by reference void modify(int& num) { // Modify the parameter directly (no need for dereferencing) num = num * 2; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass `number` by reference modify(number); // `number` in the main function is modified directly through the reference std::cout << "After function call: " << number << std::endl; }
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo