I don't want to repeat all the earlier arguments, but consider: A null pointer can be produced legally by arithmetic operations, as well as by hard-coded (foo *)0 constants in the source. To use a special nil value would require run-time checks to be applied to much pointer arithmetic. This is contrary to the intent of C.