A pointer variable stores a memory address. When you declare int* a, the variable a itself holds an address. Accessing a returns that address value. Dereferencing (*a) gives the value at that address. Taking address of a (&a) gives the address where the pointer variable is stored, not the address it holds.