A pointer is a variable that stores the memory address of another variable. Pointers allow functions to modify variables in the caller and are useful for handling arrays and dynamic memory allocation. Pointers contain the address of the memory location they point to. Pointer variables can be declared to hold these memory addresses and can then be used to indirectly access the value at the addressed location.