A pointer is a variable that stores the address of another variable in memory. Harold Lawson invented the pointer concept in 1964 and introduced it in PL/I, allowing linked lists to be implemented more flexibly in a high-level language. Pointers are used to manage data structures like lists, queues and trees by providing start, end and stack pointers that can be absolute memory addresses or relative offsets. Pointers are supported in languages like PL/I, C, C++ and Pascal and are primarily used to construct references and pass data between different parts of a program.