When we use a non-pointer variable, we are, in fact, accessing the value directly through the variable's identifier (its named location). This is calleddirect addressing.
When we use a pointer variable to access a value at its assigned, named location (a variable in a different location), we are accessing that value through the pointer variable. Here, we access the variable indirectly through the pointer. In essence, from the pointer value, we get the address of the value we want, then we go to that address to get the actual value.
Before going further, we need to understand some background concepts—memory and memory addressing.