A pointer is a variable that stores the memory address of another variable. Pointers allow access and manipulation of other variables indirectly. There are two pointer operators - the address-of operator (&) which returns the memory address of a variable, and the dereference operator (*) which accesses the value of the variable at the memory address stored in the pointer. Pointers can be initialized by assigning the address of a variable to the pointer variable. Pointers can be used to pass arguments by reference, allowing changes made to parameters within a function to be reflected in the calling function.