Las respuestas correctas ya están aquí, pero ¿puedo contarle un truco que generalmente me ayudó cuando tuve que usar mucho C?
Así se pronuncia "*" en la cabeza, y hay dos partes.
La parte común es cuando es parte de un tipo - y todo el mundo probablemente dice "puntero" cuando lo leen, lo cual es genial. Así que (int *) es un puntero int - o incluso lo revertiré en mi cabeza para leer "puntero a un int" que parece ayudar un poco.
Lo que más ayuda para mí es cuando ves * en tu código, léelo como "a lo que apunta".
Si usted sigue este patrón, entonces:
int num = *(int *)number;
es una variable "num" entero se le asigna el valor: lo que está apuntada por un puntero int, número. Simplemente se traduce a sí mismo.
A veces hay que confundirse un poco con el fraseo, pero desde que tuve ese hábito nunca tuve un gran problema al leer el código del puntero.
Creo que también leí & como "La dirección de" en C, pero creo que se ha sobrecargado en C++ si no recuerdo mal.
+1 @Charles sí, básicamente num ahora tendrá una copia del valor al que apuntaba el número. – pstrjds
Merece la pena agregarlo: Al convertir FROM void pointer, tenemos que usar los operadores de conversión. Esta es la razón de usar (int *) que arroja 'number' que es puntero a void, a un puntero a un int. Y * además deferencia este puntero a un int para devolver un int. –