Нет гарантии какой-либо связи между размерами этих двух типов, а также то, что ни один из них не может быть достоверно представлен в другом посредством двусторонних приведений. Это все зависит от реализации.
С учетом сказанного, в реальном мире, если вы не имеете дело с действительно неясными устаревшими 16-битными системами или странными DSP или чем-то подобным, sizeof(int)
будет меньше или равен sizeof(void *)
, и вы можете добросовестно преобразуйте значения int
в void *
, чтобы передать их интерфейсам (например, pthread_create
), которые принимают общий аргумент void *
, чтобы избежать расточительного распределения и освобождения памяти для хранения одного int
. В частности, если вы уже используете интерфейсы POSIX или Windows, это определенно безопасное реальное предположение.
Вы должны никогда предполагать, что void *
может быть точно представлено в int
(т.е. приведение указателя на int
и обратно). Это не работает ни на каких популярных реальных 64-битных системах, и процент систем, на которых он работает, в ближайшем будущем резко упадет.