A pointer is a variable that stores the memory address of another variable. Pointers must be declared before use and are declared with a data type followed by an asterisk. Common pointer types include int*, char*, and float*. The value of a pointer is the memory address that it points to. Pointers allow accessing and modifying the value of the variable being pointed to using dereferencing operator (*). Pointers can be manipulated using arithmetic operators and compared using relational operators. Arrays of pointers and pointers to pointers are also supported in C. Pointers are commonly used to pass arguments by reference in functions.