Nelle funzioni serve per dire che "la funzione non ritorna nulla" (appunto come una funzione che stampa solo a video senza dover "passare" valori al resto del programma).
In altri casi (usato come void*) è un puntatore a funzione.
Difficile che vedrai tali costrutti in corsi base
In pratica
#include <stdio.h>
//funzione con parametro intero e lo stampa
void fun(int a)
{
printf("Il valore passato è %d\n", a);
}
int main()
{
void (*fun_ptr)(int); //definisco il puntatore a funzione
fun_ptr = &fun; //assegno a fun_ptr l'indirizzo della funzione
// Chiamo fun(), con 10 come parametro usando fun_ptr
(*fun_ptr)(10);
//definisco una macro per non avere troppi * in giro
#define nuf (*fun_ptr)
//chiamo la funzione ridefinita senza dover dereferenziare direttamente il puntatore
nuf(11);
return 0;
}
O anche si può usare per passare parametri di cui non si conosce il tipo