What is the definition of pointer?
Che dipende completamente, dalla lingua.
Sia C che C ++ (non esiste un linguaggio come "C / C ++"!) hanno una definizione solida e precisa di puntatori. Ad esempio, C99 dice (§6.2.5.20):
A pointer type may be derived from a function type, an object type, or an incomplete type, called the referenced type. A pointer type describes an object whose value provides a reference to an entity of the referenced type. A pointer type derived from the referenced type T is sometimes called ‘‘pointer to T’’. The construction of a pointer type from a referenced type is called ‘‘pointer type derivation’’.
(sottolineatura mia)
in seguito, quando si descrive l'operatore &
(address-of) (§6.5.3.2.3):
The unary &
operator yields the address of its operand. If the operand
has type ‘‘type’’, the result has type ‘‘pointer to type’’.
Questa interpretazione suggerisce nuovamente che un "puntatore" è semplicemente un indirizzo. (Beh, non semplicemente, ma comunque un indirizzo.)
Is the ability to "dereference" the pointer essential to the concept of a pointer?
Di nuovo, dipende. Concettualmente, Java ha dei puntatori, ma non puoi dereferenziarli. Gli oggetti Objective-C sono anche puntatori, ma il compilatore si lamenta se si sta tentando di dereferenziare un tale puntatore. (Sospetto che questi fenomeni abbiano un'origine comune: i puntatori sono usati in entrambi i linguaggi per rappresentare riferimenti agli oggetti, e a livello di implementazione, sono anche usati per cose intelligenti come il polimorfismo.)
So what is the precise definition of pointer i can answer irrespective of specific programming language?
Sfortunatamente, non esiste una cosa del genere. (Autopromozione spudorata: ma puoi fornire un link a questa risposta se ritieni che sia abbastanza buono: P)