A normal variable has 2 "parts" to it? one part is the actual value and the other part is the location of that value in the memory
A variable contains only one piece of data: Its value. However, whenever we read that value, we also know its location (otherwise we wouldn't have been able to read the value). So it'd also be correct to say that every variable has an location. It's just not stored in the variable, but rather, the variable is stored in that location.
So a pointer variable is just the location part of a normal variable, and it doesn't have value itself?
No, a pointer is a "normal variable" too. It contains a value, and it is stored at a location.
But in this case, its value is another location. But the pointer value is also stored at some location in memory. It has to be, in order to exist in the program.
Of course, the pointer doesn't contain the location it points to, any more than a letter contains the building it is addressed to. It simply contains the address "written down".
At address 0x16 we might have stored an integer. At address 0x42 we could then create a pointer, containing the value 0x16. The pointer now "points to" our integer. But it doesn't contain the integer, and the pointer itself also has an address. (So at address 0x20 we could create a pointer to the pointer, by storing the value 0x42 in it.
The key is that everything in memory is located at some address. And that address can be "written down" as a number. And that number can be stored at another address. And that's what a pointer is. A location containing the address of some other object.