Hello,

I wrote a little simulation prog to try and understand better the semantics of 
var parameters (see below code and output).

It seems they behave like if passed via pointers, but also locally _operated_ 
via pointers. Meaning there is in ChangeVar no real local variable n (on the 
stack). But instead Pascal silently behaves like if using p^ for both getting 
and setting the variable ('s value) "on-place". This is illustrated by the 
difference of result between the simulating funcs changePtrVar & 
changePtrDirect.

Is this interpretation more or less correct?
How are var parameters actually implemented?

Maybe there is still a local var, but the behaviour rather looks like the 
following code:

procedure change(p:IntPointer);
var
        n : Integer;
begin
        n := p^;        // <=> var parameter passing
        p^ := n+1;      // <=> n := n+1   but:
                        // setting silently reuses p
end;


======= code =======
var
        n,m : Integer;
        p : IntPointer;

procedure changeVar(var n:Integer);
begin
        n := n+1;
end;

procedure changePtrVar(p:IntPointer);
var
        n : Integer;
begin
        n := p^;
        n := n+1;
end;

procedure changePtrDirect(p:IntPointer);
begin
        p^ := p^+1;
end;

begin
        // change var
        n := 3;
        changeVar(n);
        writeln(n);
        // change ptr var
        n := 3;
        p := @n;
        changePtrVar(p);
        writeln(n);
        // change ptr direct
        n := 3;
        p := @n;
        changePtrDirect(p);
        writeln(n);
end.
======================
======= output =======
4
3
4
======================


Denis

PS: Is there a reason why I don't receive my own posts? (this only happens to 
me on fpc and lazarus mailing lists).
________________________________

vit esse estrany ☣

spir.wikidot.com
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to