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