It comes, I think, from only knowing one language that uses the term
"pointer".
Certainly assembler, C, C++ all allow pointer arithmetic.
PL/1 ptr/pointer is untyped. You can set them with the ADDR pseudo
function to objects (level 01) or field in objects (level 02) or even
individual elements of arrays. Using a feature similar to C unions you
can fiddle pointers to your hearts content.
It has been a while since I wrote Pascal, but IIRC Pascal pointers
are typed. e.g. ^treenode; They behave similarly to Java references
with the exception that there is no gc. You have to use a manual
dispose. You also have to keep your wits about you whether you want
p:=q (to copy pointers) or p^:=q^ (copy the objects pointed to).
I don't recall a way of getting a pointer other than via new, so I
think these are half way between Java references and C pointers.
Since the term pointer is used in so many contexts you can't very well
claim any authorative definition. Here though are the factors that I
think any definition would likely consider:
Pointer attributes:
1. close to the hardware, an absolute or relative hardware address
2. can point in to the middle of objects.
3. can do arithmetic on a pointer via some sort of kludge.
Reference attributes:
1. the bits of the representation is not accessible to examine or
change as bits/numbers.
2. they always point to objects as a whole, never to fields in an
object..
3. garbage collection of objects.
4. the inability to accidentally reference memory other than to a
valid object.