Pointer is a variable that stores the address of another variable. The '&' operator returns the address of a variable and '*' operator accesses the value of the variable being pointed to. Pointers must be declared with a data type that matches the variable it is pointing to (e.g. int* points to an int). Pointers can point to the address of other pointers, forming a chain. To access the value of a variable through a pointer, the pointer is dereferenced with the '*' operator.