4.3.2 Casting pointers
Pointers can be cast from one pointer type to another pointer type. However, pointers should never be cast to a fixed-size data type, and fixed-size data types should never be cast to pointers.
The size of a pointer varies depending on the platform architecture, such as 32-bit versus 64-bit platforms. If any assumptions are made that a pointer to a function or a pointer to a data structure is a 32-bit value, then that code may not run on 64-bit platforms with physical memory above 4 GB.