The distinction that exists in C++ between "reference" and "pointer" is something very recent. In the past the 2 terms were synonymous.
The term "pointer" was introduced by IBM PL/I in July 1966, where it replaced "reference".
PL/I has introduced many terms that have replaced previously used terms. For example:
reference => pointer
record => structure
process => task
and a few others that I do not remember right now.
"Pointer" and "structure" have become dominant after they have been taken by the C language from PL/I and then C has become extremely popular. Previously "reference" and "record" were more frequently used.
So it had everything that C has, except pointer arithmetic.
Only a subset of the programming languages that have pointers also allow pointer arithmetic, because many believe that whenever address arithmetic is needed only indices shall be used, not pointers, because with indices it is much easier for the compiler to determine the range of addresses that may be accessed.