The historical context is that C originally was a very weakly typed language. (For example, there were no function prototypes!) The language also acknowledged that addresses -- i.e., pointers! -- are essentially integers; one could assign between the two of them at will. Neither the null pointer's name nor the name of the macro
NULL
are accidental: Often it was (and often still is) literally the address with an integer value of 0 where no legitimate data was assumed, so that it was distinct from any legit address.