What is the definition of pointer?
That completely, entirely depends on the language.
Both C and C++ (there's no such language as "C/C++"!) have a solid, precise definition of pointers. For example, C99 says (§126.96.36.199):
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’’.
later, when describing the
& (address-of) operator (§188.8.131.52.3):
& operator yields the address of its operand. If the operand
has type ‘‘type’’, the result has type ‘‘pointer to type’’.
This interpretation again suggests that a "pointer" is simply an address. (Well, not simply, but an address nevertheless.)
Is the ability to "dereference" the pointer essential to the concept of a pointer?
Again, that depends. Conceptually, Java has pointers, but you can't dereference them. Objective-C objects are pointers too, but the compiler whines if you are trying to dereference such a pointer. (I suspect that these phenomena have a common origin - pointers are used in both languages to represent references to objects, and at an implementation level, they are also used for different clever things like polymorphism.)
So what is the precise definition of pointer i can answer irrespective of specific programming language?
Unfortunately, there's no such thing. (Shameless self-promotion: but you can provide a link to this answer if you think it's good enough :P)