Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

(Sebesta, 2000) Considere o programa BIGSUB apresentado a seguir:

program BIGSUB;
var
GLOBAL : integer;
LIST : array[1..2] of integer;

procedure SUB(PARAM : integer);
begin
PARAM := 3;
GLOBAL := GLOBAL + 1;
PARAM := 5;
end;

begin
LIST[1] := 3;
LIST[2] := 1;
GLOBAL := 1;
SUB(LIST[GLOBAL]);
end.

Execute manualmente o novo programa sob as mesmas pressuposições e compare os valores resultantes do array LIST em BIGSUB depois do retorno de SUB:

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

 

Parâmetros são passados por valor
VariávelInicialSUB(LIST[GLOBAL])
LIST[1]33
LIST[2]11
GLOBAL11 2
PARAM 3 3 5
Parâmetros são passados por referência
VariávelInicialSUB(LIST[GLOBAL])
LIST[1]33 3 5
LIST[2]11
GLOBAL11 2
PARAM LIST[1]
Parâmetros são passados por nome
VariávelInicialSUB(LIST[GLOBAL])
LIST[1]33 3
LIST[2]11 5
GLOBAL11 2
PARAM LIST[GLOBAL]
Parâmetros são passados por valor-resultado
VariávelInicialSUB(LIST[GLOBAL])
LIST[1]33 5
LIST[2]11
GLOBAL11 2
PARAM 3 3 5 (LIST[1])

Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.