Pointers variables store the address of other variables rather than their values. There are several pointer operations including incrementing/decrementing a pointer, adding/subtracting an integer from a pointer, subtracting two pointers of the same type, and comparing pointers of the same type. Pointer arithmetic allows pointers to be manipulated by adding or subtracting integers. Passing a pointer to a function allows changes made by the function to permanently affect the variable at the passed address, known as call by reference. Pointers can also point to arrays, other pointers, and functions.