A pointer in C language stores the address of another variable. Pointers are used to allocate memory dynamically at runtime. Pointer variables can be of any data type like int, float, char, etc. The & operator returns the address of a variable, while the * operator accesses the value stored at the address specified by the pointer. Pointers allow programs to manipulate memory addresses directly and access values indirectly through their memory addresses.