the standard does mandate that, yes. as i understand it, you could, for example, take the bitwise
not of a pointer value to be its
intptr_t value, and then use the all-ones bit pattern for your null pointer. probably a lot of existing c programs would fail to work on such an implementation (because they assume that memset with 0 will create null pointers, for example), but permitting such things was an intentional feature of the standard
usually there is some memory address that you can sacrifice for null pointers