I know this is very basic but it is little bit confusing to me.
I\'ve read:
a pointer is nothing more than an address
A variable is a place to store a value. In C, whenever you use a variable in a context that needs a value, the value of the variable is retrieved, so saying "p" in that context is the same as saying "the value of variable p":
int *q = p; // Copy the value of variable p into the variable q.
// aka: copy p into q.