codice:
int n = *((int*)arg)
Allora, è chiaro che "n" è di tipo intero, mentre ciò che segue l'uguale è un po' ostico.

"arg" è probabilmente un puntatore ad un area di memoria, addirittura potrebbe essere "void* arg".

Spacco in due passi lo statement.

Il cast
codice:
int* m = (int*)arg
forza l'area di memoria a puntatore da intero, cioè sto dicendo fai in modo che il contenuto dell'area di memoria puntata sia un intero. Ora m punta ad un intero. Ovvio ora il significato di
codice:
int n = *m
che assegna ad n il valore puntato da m.

Lo stesso effetto dovresti poterlo ottenere in questo modo
codice:
int n = (int)(*arg)
Tutto chiaro???