On Sat, Apr 29, 2006 at 11:20:04PM +0200, Peter Vreman <[EMAIL PROTECTED]> wrote: > > > > Are const parameters supposed to ensure read only access? > > If so how come one can write to a typed pointer? > > > > program project1; > > > > {$mode objfpc}{$H+} > > > > type > > PSomeRec = ^TSomeRec; > > TSomeRec = record > > a: string; > > b: string; > > end; > > > > procedure ChangeRec1(const Rec: PSomeRec); > > begin > > Rec^.a:= 'string A'; > > end; > > > > var > > RecPtr: PSomeRec; > > begin > > new(RecPtr); > > ChangeRec1(RecPtr); > > writeln(RecPtr^.a); > > dispose(RecPtr); > > readln; > > end. > > Only the pointer itself is the parameter and read-only. Where the pointer > points to is irrelevant.
But in this case I'm wondering why you want to give a pointer instead of the real type? The reason for a pointer is normally in this case to avoid that the given data is copied into local variables. >From my understand the compiler handles following parameter attributes: - 'var': call by reference => gives pointers, content writable - 'const': gives pointer, content read-only - '': call by value => creates a local copy of the data, content is lost after end of procedure/function - 'out': I'm not sure if it's more similar to 'var' or ''. This is the reason why I always declare parameters that are not 'var' with 'const'. Are my expanations right especially related to 'const'? Michael _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal