¿Es correcto convertir a int después de desreferenciar un puntero vacío?

void* aPtr = NULL;  // we don't yet know what it points to.
...
aPtr = &height;     // it has the address of height, but no type yet.
...
int h = (int)*aPtr; // with casting, we can now go to that address
                    // and fetch an integer value.

( Aprende Programación C; Jeff Szuhay )

'with casting, we can now go [...]'

La pregunta es: ¿podemos realmente?

Answer

Dereferencing and Casting Void Ptr (Learn C Programming, Jeff Szuhay)

'with casting, we can now go [...]'

The question is - can we really?

Sí, pero el código que se muestra no elimina ninguna referencia. Bueno, intenta desreferenciar a void*y convertir el resultado en int. Así no es como se debe hacer. Primero debe convertir int*y luego desreferenciar eso int*.

int h = *(int*)aPtr;    // now dereferenced ok (assuming `height` is an `int`)
//      ^   ^
//      |   |
//      |  proper cast
//      |
// dereferencing the right thing