Hmm, is this a standard way of getting a pointer value as an integer? It seems to me that it could have a strange or non-portable interaction with a `void *`. The MSVC compilers tend to find such things unpalatable. Starting with a `char *` might be safer. Note also that `npy_intp` is signed and may cause problems with `size_t`.

Should probably add a comment that this only works for architectures with linear addressing.