Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender passagem por valor;
  2. Entender passagem por referência;

Às vezes, precisamos passar argumentos para serem apenas utilizados internamente em uma função ou procedimento sem nos importarmos com a alteração dessas informações. Outras vezes, precisamos que esses valores sejam alterados. Essas situações são conhecidas como passagem por valor e passagem por referência de argumentos.

Quando queremos apenas passar os parâmetros para ser utilizados em um função e procedimento sem que a alteração de seus valores sejam alterados, a forma como passamos essas informações é chamada de passagem por valor.

Mesmo sendo alterados internamente em uma função ou procedimento, essa alteração não irão refletir na variável original passada como argumento, pois as alterações são realizadas sobre suas cópias locais. Essas cópias são descartadas ao término da função ou procedimento.

Sintaxe: declaração
funcao tipo_retorno nome_funcao(tipo_dado1 param1, tipo_dado2 param2, tipo_dadoN paramN)
{
   //corpo
}
Sintaxe: uso
nome_funcao(arg1, arg2, argN)
Exemplo 1
programa
{
    funcao void PassagemPorValor(inteiro num1, inteiro num2)
    {
        num1 = 2
        num2 = 3
        escreva(num1)
        escreva(num2)
    }

    funcao inicio()
    {
        inteiro num1,num2;

        num1=0;
        num2=1;
		
        PassagemPorValor(num1,num2)

        escreva(num1)
        escreva(num2)
    }
}
Saída
2301

No exemplo acima, os argumentos num1 e num2 são alterados internamente dentro de PassagemPorValor. Os novos valores não são refletidos nas várias declaradas na função inicio, em que os valores 0 e 1 são exibidos, como pode ser observado na saída do programa.

Quando queremos alterar uma variável passada como argumento dentro de uma função ou procedimento, passamos essa variável por referência. Isso significa que estamos passando uma referência que será utilizada para acessar a variável de forma indireta.

Sintaxe: declaração
funcao nome_funcao(tipo_dado1 &nome_param1, tipo_dado2 &nome_param1, tipo_dadoN &nome_param1){
   //corpo
}
Sintaxe: uso
nome_funcao(arg1, arg2, argN)
Exemplo 2
programa
{
    funcao PassagemPorReferencia(inteiro &num1, inteiro &num2) //Protótipo
    {
        num1 = 2
        num2 = 3
    }

    funcao inicio()
    {
        inteiro num1,num2

        num1=0
        num2=1
		
        escreva(num1)
        escreva(num2)

        PassagemPorReferencia(num1,num2)

        escreva(num1)
        escreva(num2)
    }
}
Saída
0123

No exemplo acima, alteramos os valores dos parâmetros num1 e num2 internamente dentro da função PassagemPorReferencia passados por referência. Essas alterações são aplicadas nas variáveis declaradas na função inicio.

  1. 02/10/2024 - revisão 2 - Correção: intro, passagem 'valor'/'referência'; ajustes pontuais
  2. 29/05/2023 - revisão 1 - Correção em navegação e erros gramaticais
  3. 08/05/2023 - versão inicial