On August 10, 2023 at 0:06:57 +0200, Hairy Pixels via fpc-pascal <fpc-pascal@lists.freepascal.org> wrote: >> On Aug 9, 2023, at 2:54 PM, Tomas Hajny via fpc-pascal >> <fpc-pascal@lists.freepascal.org> wrote: >> >>> >>> 1) what does "i := x - x;" do and what is it's purpose and why doesn't "x + >>> x" work the same? >> >> Pointer subtraction is a reverse operation to adding a number to a pointer; >> the result of the subtraction is the offset between the two pointers. > >Is that different than decrementing the pointer? > >What would an offset between two pointers be used for? Is the offset even a >memory address or just a number of bytes? If you had an example usage that >would be interesting to see.
No, the offset is not a memory address but just a number of bytes (which is also the reason why you cannot add the pointers together, but you can add a number to a pointer. As an example, you could use this operation to find out the exact alignment of fields within a record (to check whether there's some padding inserted between them) - e.g. if you aren't sure what alignment directive was used for compiling a unit declaring the structure, or to understand the compiler behaviour for a particuler alignment directive.. >>> 2) I've used pointer equality of course but what does "x > p" do and what >>> is its purpose? >> >> Relative position between the two locations in memory? As an example, it may >> be used to check whether a particular pointer points to a location between >> the start and the end of an allocated memory block (obviously, you'd need >> two comparisons for that). > >I guess that makes sense if a memory address with a higher value is always >after an address with a lower value. Is that assumption always true? I believe that this is indeed guaranteed (at least as long as linear pointers are concerned, but Pascal pointer is IMHO always linear - as opposed to a farpointer using a segmented model or a combination of a selector and an offset. Tomas _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal