[fpc-pascal] Pointers

Mattias Gaertner nc-gaertnma at netcologne.de
Thu Feb 11 23:23:35 CET 2010


On Thu, 11 Feb 2010 21:53:59 +0100
Rainer Stratmann <RainerStratmann at t-online.de> wrote:

> Am Thursday 11 February 2010 21:24:03 schrieb Ralf A. Quint:
> > At 12:07 PM 2/11/2010, Jonas Maebe wrote:
> > >On 11 Feb 2010, at 18:17, Rainer Stratmann wrote:
> > >>In the past with the turbopascal compiler and other always sizeof
> > >>byte was
> > >>added.
> > >
> > >That is not true. This program prints "2" when compiled under Turbo
> > >Pascal:
> >
> > I am fairly certain that he confuses this with the special case of
> > applying sizeof() to a string type, where you always get one byte
> > more (the preceding length byte) than the string type has been
> > defined, for example SizeOf (String [80]) will return 81, 80 bytes
> > reserved for the contents plus the length byte...
> >
> > Ralf
> 
> How can I have access to position 4 of a pointer?
> 
> var
>  p : pbyte;
>  c : char;
>  s : ansistring;
>  x : longint;
> 
> ...
> 
>  s := 'Hello';
>  p := @s;

Now p is an PAnsiString.
Maybe you meant:
p:=PByte(s);

 
>  x := 4;  // 4th position
> 
>  c :=  [p+x]^ ??? how to get access to the 'o'

c:=chr(p[x]);

But normally you use PChar:

var p: PChar;
...
p:=s;
c:=p[x];

Mattias



More information about the fpc-pascal mailing list