According to Frank Heckenbach:
I'm briefly describing the situation I have. It's about speed optimization. [...] I thought about optimizing it with a pointer like this:
function f(var a:t):integer; var p:^integer; begin p:=@a[0]; {some loop} if {...} then begin p^:=...; inc(p) {is this ok, BTW?} end; {...} f:="offset of p in a" end.
"inc(p)" should work in GPC. You can even do for p:= @a [ 0 ] to @a [ n ] do p^:= ...; Since all this is a "not very Pascalish" feature of GPC, you must enable it with the (*$X+*) directive.
So "f:=(integer(p)-integer(@a)) div sizeof(a[0])" doesn't seem to work then. Or are other means of pointer arithmetic available -- or completely other ways to do it?
This wouldn't work in C either because of the same reason (SizeOf ( Pointer ) needn't be the same as SizeOf ( Integer )). How would you solve this problem in C? What about intoducing a "difference between pointers" operator which returns the number of elements they lie apart (as an integer)? f:= p - @a [ 0 ]; (Only with (*$X+*), of course.) Greetings, Peter Dipl.-Phys. Peter Gerwinski, Essen, Germany, free physicist and programmer peter.gerwinski@uni-essen.de - http://home.pages.de/~peter.gerwinski/ [970201] maintainer GNU Pascal [970510] - http://home.pages.de/~gnu-pascal/ [970125]