Это будет работать на всех платформах / средах, где sizeof(void*) >= sizeof(int)
, что, вероятно, большинство из них, но я думаю, что не все из них.Вы не должны полагаться на это.
Если вы можете, вместо этого вы должны использовать объединение:
union {
void *ptr;
int i;
};
Тогда вы можете быть уверены, что есть место для данных любого типа, и выМне не нужен актерский состав.(Только не пытайтесь разыменовать указатель, пока в нем есть данные без указателя.)
В качестве альтернативы, если причина, по которой вы это делаете, заключается в том, что вы использовали int для хранения адреса, вывместо этого следует использовать size_t
intptr_t
, чтобы этого было достаточно для хранения любого значения указателя на любой платформе.