Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Passando Argumentos por Valor/Ponteiro/Referência | Function Arguments Specification
course content

Conteúdo do Curso

C++ Functions

Passando Argumentos por Valor/Ponteiro/ReferênciaPassando 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).

cpp

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.

cpp

main.cpp

Code Description
  • We use the int* type specifier inside the function signature which means the following: the numPtr argument is the memory address of the variable with type int.
  • As a result, to access the value via its memory address, we have to dereference the pointer inside the function using the *numPtr construction.
  • Inside the 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).
    cpp

    main.cpp

    Conclusão

    AspectoPassagem por ValorPassagem por PonteiroPassagem por Referência
    Sintaxevoid func(int val)void func(int* ptr)void func(int& ref)
    Uso de MemóriaCopia o valorArmazena endereço de memóriaReferencia a variável original
    Acesso ao ValorAcesso direto ao valorRequer desreferenciaçãoAcesso direto, sem desreferenciar
    ModificaçãoNão pode modificar o originalPode modificar através do ponteiroPode modificar o original diretamente
    Chamada de Funçãofunc(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)

    Qual método de passagem de argumentos permite a modificação direta da variável original dentro de uma função?

    Selecione a resposta correta

    Tudo estava claro?

    Seção 2. Capítulo 2
    course content

    Conteúdo do Curso

    C++ Functions

    Passando Argumentos por Valor/Ponteiro/ReferênciaPassando 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).

    cpp

    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.

    cpp

    main.cpp

    Code Description
  • We use the int* type specifier inside the function signature which means the following: the numPtr argument is the memory address of the variable with type int.
  • As a result, to access the value via its memory address, we have to dereference the pointer inside the function using the *numPtr construction.
  • Inside the 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).
    cpp

    main.cpp

    Conclusão

    AspectoPassagem por ValorPassagem por PonteiroPassagem por Referência
    Sintaxevoid func(int val)void func(int* ptr)void func(int& ref)
    Uso de MemóriaCopia o valorArmazena endereço de memóriaReferencia a variável original
    Acesso ao ValorAcesso direto ao valorRequer desreferenciaçãoAcesso direto, sem desreferenciar
    ModificaçãoNão pode modificar o originalPode modificar através do ponteiroPode modificar o original diretamente
    Chamada de Funçãofunc(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)

    Qual método de passagem de argumentos permite a modificação direta da variável original dentro de uma função?

    Selecione a resposta correta

    Tudo estava claro?

    Seção 2. Capítulo 2
    some-alt