[fpc-pascal] Pointer question

Bernd Oppolzer bernd.oppolzer at t-online.de
Thu Aug 10 13:43:13 CEST 2023

FWIW, when I added similar functionality to my Stanford Pascal compiler, 
I chose not to allow arithmetic
of pointers, but instead I added some functions:

PTRADD (p, i) - p is type ANYPTR, i is integer, result is of type ANYPTR
PTRDIFF (p1, p2) - two pointers, the result is integer
ANYPTR is a predefined type, compatible with every (typed pointer)
ADDR (x) is a function (borrowed from PL/1), which returns an ANYPTR ... 
and it is allowed for all types of variables
PTRCAST is the same as PTRADD (p, 0) - and is used to cast pointers 
between incompatible pointers (not type safe)

Kind regards


Am 10.08.2023 um 10:52 schrieb Elmar Haneke via fpc-pascal:
>> 1) what does "i := x - x;" do and what is it's purpose and why doesn't "x + x" work the same?
> Subtracting pointers may be useful if they point to consecutive 
> memory. The Result is the number of bytes between both addresses.
> Adding pointers is useless, you would get a pointer pointing to some 
> address in address space which has no relation to the pointers — 
> presumably accessing it would rise an error.
> Therefore, it is a good idea to let the compiler prevent such mistakes.
>> 2) I've used pointer equality of course but what does "x > p" do and what is its purpose?
> It may be useful if pointers do point into a continuous data object, 
> e.g. a write-pointer inside a buffer.
> Elmar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20230810/66b99ea4/attachment.htm>

More information about the fpc-pascal mailing list