> Sorry, not so.
It might not be an allocated object but 0 (zero) can be a valid address.
On some platforms it is the reset/interrupt vector.
No, a pointer object initialized from "nullptr", "0", or "NULL" (which must be either "nullptr" or "0") yields the null pointer value of its type and this value never points to an object. Even if the OS maps something at that address (interrupt vector or whatever), that entity is not accessible from within a conforming C++ program (and ideally the current process has no read and no write permission to the page for that address, which normally leads to segfault if the compiler did not optimized away the UB).
<
https://cppreference.com/w/cpp/language/pointer.html#Null_pointers>
If you read the standard carefully, initialization of a pointer type with a constant "nullptr", "0" or "NULL" is required to point at a location that has no object, furthermore this location need not even be located at address "0x0", the actual value representation of the null pointer value of T* is unspecified, and also irrelevant. Even the following is unspecified (could be true or false)
"(void*)nullptr != reinterpret_cast<void*>(0x0)"