A nitpick to your nitpick: they said "memory location". And yes, a pointer always points to a memory location. Notwithstanding that each particular region of memory locations could be mapped either to real physical memory or any other assortment of hardware.
You can point to a register which is certainly not memory.
No. Neither in the language (NULL exists) nor necessarily on real CPUs.