We saw in the previous section how to increment a pointer so that it points to the next element in the array.
Decrementing a pointer p (i.e., making it point to the previous element) is done in a similar way, using the p- statement.
Actually, p++ and p- are really expressions which denote pointer values.
p++ denotes the address stored in p before it is incremented, and p- denotes the address after p is decremented.
Therefore,
addr:=p p++
does the same as
addr:=p++
And
p-- addr:=p
does the same as
addr:=p--
The reason why ++ and - should be used to increment and decrement a pointer is that values from different types occupy different numbers of memory locations.
In fact, a single memory location is a byte, and this is eight bits.
Therefore, CHAR values occupy a single byte, whereas LONG values take up four bytes (32 bits).
If p were a pointer to CHAR and it was pointing to an array (of CHAR) the p+1 memory location would contain the second element of the array (and p+2 the third, etc.).
But if p were a pointer to an array of LONG the second element in the array would be at p+4 (and the third at p+8).
The locations p, p+1, p+2 and p+3 all make up the LONG value at address p.
Having to remember things like this is a pain, and it's a lot less readable than using ++ or -.
However, you must remember to declare your pointer with the correct type in order for ++ and - to work correctly.
Go to the Next or Previous section, the Detailed Contents, or the Amiga E Encyclopedia.