cosa significa convertire int in vuoto * o viceversa?

Cosa significa convertire un valore intero in un void* o viceversa da un punto di vista della memoria? La mia comprensione è void* è un indirizzo di un blocco di memoria di lunghezza non specificata.
Questo sembra essere qualcosa come confrontare la mela con le arance.

 int myval = 5; void* ptr = (void*)myval; printf("%d",(int)ptr); 

Mi sono reso conto che avrei dovuto fornire il contesto esatto in cui è usato.

 int main(int argc, char* argv[]) { long thread; /* Use long in case of a 64-bit system */ pthread_t* thread_handles; /* Get number of threads from command line */ if (argc != 2) Usage(argv[0]); thread_count = strtol(argv[1], NULL, 10); if (thread_count  MAX_THREADS) Usage(argv[0]); thread_handles = malloc (thread_count*sizeof(pthread_t)); for (thread = 0; thread < thread_count; thread++) pthread_create(&thread_handles[thread], NULL, Hello, (void*) thread); printf("Hello from the main thread\n"); for (thread = 0; thread < thread_count; thread++) pthread_join(thread_handles[thread], NULL); free(thread_handles); return 0; } /* main */ /*-------------------------------------------------------------------*/ void *Hello(void* rank) { long my_rank = (long) rank; /* Use long in case of 64-bit system */ printf("Hello from thread %ld of %d\n", my_rank, thread_count); return NULL; } /* Hello */ 

Questo codice è tratto dal libro di Peter Pachecho sulla programmazione parallela.