Conteúdo do Curso
C++ Functions
2. Especificação de Argumentos de Função
3. Especificação do Valor de Retorno da Função
4. Alguns Tópicos Avançados
C++ Functions
Passando Argumentos por Valor/Ponteiro/Referência
O C++ oferece uma vantagem única ao permitir a manipulação direta com a memória do computador, proporcionando maior flexibilidade em nossos programas. A discussão a seguir explorará três métodos de passagem de argumentos para funções do ponto de vista da memória.
Passagem por valor
Na seção anterior, discutimos escopos de variáveis e estabelecemos que variáveis criadas dentro de uma função só são acessíveis dentro dessa função. Esse conceito permanece verdadeiro mesmo ao passar argumentos para uma função. Variáveis declaradas na assinatura da função têm escopo local; elas são passadas por valor, significando que seus valores são copiados para dentro da função e armazenados em variáveis separadas (lembre-se do nosso exemplo do livro de biblioteca para entender isso).
main.cpp
Passagem por ponteiro
Nem sempre é bom passar argumentos por valor. Em primeiro lugar, passar uma cópia consome memória adicional. Em segundo lugar, há situações em que é necessário modificar a variável dentro de uma função sem depender de um comando de retorno. Nestes casos, usar um ponteiro para passar a variável é mais apropriado.
Passar uma variável por ponteiro em C++ como um argumento de função envolve passar o endereço de memória da variável em vez de seu valor real.
A passagem por ponteiro é feita usando ponteiros (operador *
) nos parâmetros da função.
main.cpp
Code Description
int*
type specifier inside the function signature which means the following: the numPtr
argument is the memory address of the variable with type int
. *numPtr
construction. main()
function, we use the &number
construction to pass the address of the number
variable as the function argument.Passagem por referência
Em C++, passar por referência significa passar o endereço de memória de uma variável diretamente para uma função, permitindo que a função modifique o valor da variável original sem qualquer operação adicional (como a desreferenciação de um ponteiro usando o operador *
).
Passar por referência é feito usando referências (operador &
) nos parâmetros da função.
Em geral, passar por referência é muito semelhante a passar por ponteiro, mas existem duas diferenças importantes:
- não precisamos usar a desreferenciação (
*
) dentro da função ao passar por referência para usar a variável (como resultado, temos acesso direto à variável correspondente). - não é necessário usar o operador "endereço de" (
&
) para passar a referência da variável como um argumento da função ao chamá-la (mas ainda temos que usar o operador&
em vez de*
na assinatura da função).
main.cpp
Conclusão
Aspecto | Passagem por Valor | Passagem por Ponteiro | Passagem por Referência |
Sintaxe | void func(int val) | void func(int* ptr) | void func(int& ref) |
Uso de Memória | Copia o valor | Armazena endereço de memória | Referencia a variável original |
Acesso ao Valor | Acesso direto ao valor | Requer desreferenciação | Acesso direto, sem desreferenciar |
Modificação | Não pode modificar o original | Pode modificar através do ponteiro | Pode modificar o original diretamente |
Chamada de Função | func(number) | func(&number) | func(number) |
Aspect | Pass by Value | Pass by Pointer | Pass by Reference |
---|---|---|---|
Syntax | void func(int val) |
void func(int* ptr) |
void func(int& ref) |
Memory Usage | Copies the value | Stores memory address | References original variable |
Accessing Value | Directly accesses value | Requires dereferencing | Direct access, no dereference |
Modification | Cannot modify original | Can modify through pointer | Can modify original directly |
Function Call | func(number) |
func(&number) |
func(number) |
Tudo estava claro?
Conteúdo do Curso
C++ Functions
2. Especificação de Argumentos de Função
3. Especificação do Valor de Retorno da Função
4. Alguns Tópicos Avançados
C++ Functions
Passando Argumentos por Valor/Ponteiro/Referência
O C++ oferece uma vantagem única ao permitir a manipulação direta com a memória do computador, proporcionando maior flexibilidade em nossos programas. A discussão a seguir explorará três métodos de passagem de argumentos para funções do ponto de vista da memória.
Passagem por valor
Na seção anterior, discutimos escopos de variáveis e estabelecemos que variáveis criadas dentro de uma função só são acessíveis dentro dessa função. Esse conceito permanece verdadeiro mesmo ao passar argumentos para uma função. Variáveis declaradas na assinatura da função têm escopo local; elas são passadas por valor, significando que seus valores são copiados para dentro da função e armazenados em variáveis separadas (lembre-se do nosso exemplo do livro de biblioteca para entender isso).
main.cpp
Passagem por ponteiro
Nem sempre é bom passar argumentos por valor. Em primeiro lugar, passar uma cópia consome memória adicional. Em segundo lugar, há situações em que é necessário modificar a variável dentro de uma função sem depender de um comando de retorno. Nestes casos, usar um ponteiro para passar a variável é mais apropriado.
Passar uma variável por ponteiro em C++ como um argumento de função envolve passar o endereço de memória da variável em vez de seu valor real.
A passagem por ponteiro é feita usando ponteiros (operador *
) nos parâmetros da função.
main.cpp
Code Description
int*
type specifier inside the function signature which means the following: the numPtr
argument is the memory address of the variable with type int
. *numPtr
construction. main()
function, we use the &number
construction to pass the address of the number
variable as the function argument.Passagem por referência
Em C++, passar por referência significa passar o endereço de memória de uma variável diretamente para uma função, permitindo que a função modifique o valor da variável original sem qualquer operação adicional (como a desreferenciação de um ponteiro usando o operador *
).
Passar por referência é feito usando referências (operador &
) nos parâmetros da função.
Em geral, passar por referência é muito semelhante a passar por ponteiro, mas existem duas diferenças importantes:
- não precisamos usar a desreferenciação (
*
) dentro da função ao passar por referência para usar a variável (como resultado, temos acesso direto à variável correspondente). - não é necessário usar o operador "endereço de" (
&
) para passar a referência da variável como um argumento da função ao chamá-la (mas ainda temos que usar o operador&
em vez de*
na assinatura da função).
main.cpp
Conclusão
Aspecto | Passagem por Valor | Passagem por Ponteiro | Passagem por Referência |
Sintaxe | void func(int val) | void func(int* ptr) | void func(int& ref) |
Uso de Memória | Copia o valor | Armazena endereço de memória | Referencia a variável original |
Acesso ao Valor | Acesso direto ao valor | Requer desreferenciação | Acesso direto, sem desreferenciar |
Modificação | Não pode modificar o original | Pode modificar através do ponteiro | Pode modificar o original diretamente |
Chamada de Função | func(number) | func(&number) | func(number) |
Aspect | Pass by Value | Pass by Pointer | Pass by Reference |
---|---|---|---|
Syntax | void func(int val) |
void func(int* ptr) |
void func(int& ref) |
Memory Usage | Copies the value | Stores memory address | References original variable |
Accessing Value | Directly accesses value | Requires dereferencing | Direct access, no dereference |
Modification | Cannot modify original | Can modify through pointer | Can modify original directly |
Function Call | func(number) |
func(&number) |
func(number) |
Tudo estava claro?