В C99 предлагается определять в файле stdint.h специальные типы intptr_t и uintptr_t :
Цитата
7.18.1.4 Integer types capable of holding object pointers
1 The following type designates a signed integer type with the property that any valid
pointer to void can be converted to this type, then converted back to pointer to void,
and the result will compare equal to the original pointer:
intptr_t
The following type designates an unsigned integer type with the property that any valid
pointer to void can be converted to this type, then converted back to pointer to void,
and the result will compare equal to the original pointer:
uintptr_t
These types are optional.
Но они не обязательны, а главное, так саму проблемму всё равно не решить, можно только спрятать её поглубже.
Реализация функции всё равно должна знать разрядность данных с которыми работает.
Russia est omnis divisa in partes octo.