[fpc-pascal] Subscript pointers

Steve Litt slitt at troubleshooters.com
Sat Jun 24 15:00:02 CEST 2023


Hairy Pixels via fpc-pascal said on Thu, 22 Jun 2023 20:23:13 +0700

>I've forgotten entirely, what does subscripting a pointer do in
>Pascal? p[0] returns 100 but after that garbage. Seems like a c-style
>array which doesn't feel right in the language.
>
>var
>  i: Integer;
>  p: PInteger;
>begin
>	p := @i;
>	p^ := 100;
>	writeln(p[0]);
>	writeln(p[1]);
>	writeln(p[2]);
>
>Regards,
>	Ryan Joseph

I don't do much with Pascal pointers, but it looks to me like you:

* Set p to the address of i
* Set the contents of p to 100
* Read the contents of p, which of course would be the value of i, 100
* Read the contents of p+1, which would be one integer width away on
  the stack, and has not been assigned to anything.

So what you report is exactly what I'd expect to happen.

If p were pointing to the first element of an array of integer that had
been initialized, it would have worked the way you intended.

p[1] is undefined, but if I had to guess, the way most compilers seem
to work, I'd say it would be one integer width of the value of p[0],
which is the address of i. If my supposition is correct, by modifying
the contents of p[1] and maybe some other elements of p, you could
write some pretty interesting self-modifying code. But don't do that.

SteveT

Steve Litt 
Autumn 2022 featured book: Thriving in Tough Times
http://www.troubleshooters.com/bookstore/thrive.htm


More information about the fpc-pascal mailing list