Technically a null pointer does not have to be 0x00000000. It only has to be equal to an integer literal null, not necessarily any 0 integer cast to a pointer. So principally a compiler could be made to use another value as null, and allow 0x00000000 to be a valid pointer. However since on most systems comparing to 0 is a more trivial operation than comparing to some other arbitrary integer, this is not done.