The C standard says nothing about pointer sizes and bit representations . It would be possible to have a completely valid implementation of C where pointers to different types has different sizes and/or bit representations and there have been platforms where this has been the case (not that I've used them).
A NULL pointer does not have to have the value 0x00000000 (please add the required number of zeros for your system). The standard states that it is the compielrs responsibility then it sees 0 (and NULL is normally just #define to 0) used in a pointer context (assignment or comparison) to assign to the pointer variable the platforms representation of an invalid pointer.
In 64 bit Windows pointers are 64 bits(surprise surprise) but ints (and longs for that matter) are still 32 bits.
Comment