Pointers are variables that contain memory addresses as values. A pointer indirectly references a value stored at a memory location, while a regular variable directly references the value. Pointers can be used to pass addresses of variables to functions to allow the functions to modify the original variables, known as call by reference. Arithmetic and logical operations can be performed on pointers, such as incrementing, decrementing, and comparing pointers.