Pointer is a variable that stores the address of another variable. There are two operators used with pointers - the address operator (&) which returns the address of a variable, and the indirection operator (*) which accesses the value at the address stored in the pointer variable. Pointer arithmetic allows performing operations like incrementing and decrementing on pointers, with the offset calculated based on the data type of the pointer. Pointers can be compared to check if they point to the same memory location. Pointers to arrays store the base address of the entire array, while pointers to elements store the address of a single element.