[fpc-pascal] Pointers
Frank Peelo
f26p at eircom.net
Fri Feb 12 09:13:47 CET 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:
>
> {$t-}
>
> type
> pw = ^word;
> var
> w: pw;
> begin
> w:=nil;
> inc(w);
> writeln(longint(w));
> end.
i.e. incrementing a pointer to word changes the address by sizeof(word)
= 2 bytes.
Incrementing always by sizeof(byte) just would not make sense. If you
have a type that takes more than one byte, such as word, or double, then
incrementing by sizeof(byte) would take you *inside* the variable, to an
address where you don't know what you should find! It would depend on
the endianness of the CPU, and what was in memory after the end of the
variable, and stuff like that. The only sensible way to increment a
pointer to SomeType is to increment by sizeof(SomeType). If you really
want to pick apart a variable byte by byte, use ^Byte.
Frank
More information about the fpc-pascal
mailing list