Paso de parámetros por referencia en Pascal

En el caso de que se requiera que el valor de una variable sea modificado por el módulo invocado, debe hacerse el paso de parámetro por referencia, por medio del cual el módulo invocado tiene acceso a la dirección en que se guarda el valor a modificar.

Para aclarar los conceptos de paso por valor y paso por referencia, analicemos el programa de suma y multiplicación de matrices dado en la sección anterior.

Observamos que las invocaciones a subprogramas son similares en los casos de paso por valor y paso por referencia.

Por ejemplo, las invocaciones a los procedimientos imprime y suma quedan de la siguiente manera :

imprime('C',mat_c,ren_a,col_b); suma(mat_a,mat_b,mat_c,ren_a,col_a);

y sus respectivas declaraciones son :

procedureimprime(nmat:char;mat_f:mat;ren_f,col_f:integer);
proceduresuma(mat_f_a,mat_f_b:mat;Var mat_f_c:mat;ren_f,col_f:integer);

Vemos que en la declaración del procedimiento suma existe la parte: Var mat_f_c :mat

la cual significa lo siguiente :

«La variable mat_f_c contiene la dirección de la variable correspondiente en la invocación ( mat_c ) , y es de tipo mat »

Esto significa que el paso del parámetro mat_c se hizo por referencia, y que el procedimiento invocado (suma) puede modificar el valor de mat_c .

Ejemplo:

Program Suma_por_Referencia;{El siguiente programa realiza la suma
   de dos números }UsesCrt;VarA,B,C:integer;
proceduresuma(A,B:integer;Var C:integer);
beginC := A + Bend;
beginClrScr;
  C:=10;
  A:=10;
  B:=10;
  suma(A,B,C);
  WriteLn(A,',',B,',',C);
  ReadKey;
  ClrScrend.

El resultado de la ejecución del programa sería:

10,10,20

El valor de C se modifica puesto que es un parámetro por referencia.

Nota : En Turbo Pascal no se permite el paso de procedimientos y funciones como parámetros.