ptr is not just a "memory address". ptr is an lvalue, an object in memory that contains an address. Each object in memory has its own address, regardless of what it holds.
Since ptr is an object in memory, it also has its own address. This address is exactly what you get when you do &ptr .
source share