sippycup sippycup - 1 year ago 59
Pascal Question

Trouble understanding pass by reference, value and name

I'm currently trying to understand passed by reference, value and name in a example problem.

procedure practice (x,y,z); interger x,y,z;
begin
y=1;
z=y-x;
end


The code given looks like and i'm supposed to show the final values of n,A[1],A[2] depending on how they are passed

A[1] := 1;
A[2] := 2;
n = 2;
practice (A[1], n, A[n]);


I believe passed by value would equate to the original values because they remain unchanged but the other two I have trouble understanding what happens.

Answer Source
procedure practice_by_value(x,y,z : integer);

In pass by value - x,y,z are variables separate from A[1],n,A[2] but do get a copy of the values that were in the corresponding A[1],n,A[2]. So since they are separate variables, as you state - the global variables A[1],n,A[2] are unchanged if changes are made to x,y or z.

procedure practice_by_reference(var x,y,z : integer);

With pass by reference - x, y, z become pseudonyms for A[1], n, A[2]. Any operations on x, y, z are the same as if that operation had been performed on A[1], n, or A[2].

I am not familiar with "pass by name" in Pascal.

var
   A : array[1.. 10] of integer;
   n :integer;

procedure practice_by_value (x,y,z : integer);
begin
   y := 1;
   z := y-x;
end; { practice_by_value }

procedure practice_by_reference(var x,y,z : integer);
begin
   y := 1;
   z := y-x;
end; 

begin
   A[1] := 1;
   A[2] := 2;
   n := 2;
   practice_by_value (A[1], n, A[n]);
   writeln('after pass by value: ',A[1],' ',n,' ',A[2]);
   practice_by_reference(A[1],n,A[n]);
   writeln('after pass by reference : ',A[1],' ',n,' ',A[2]);   
end.

after pass by value: 1 2 2  
after pass by reference: 1 1 0
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download