Un puntatore a funzione è un tipo di puntatore in C, C++, D, e altri linguaggi di programmazioni stile C. Quando viene dereferenziato esso invoca una funzione, passandole zero o più argomenti come ad una funzione normale. Nei linguaggi di programmazione come il C, i puntatori a funzione possono essere usati per semplificare il codice fornendo un modo semplice per eseguire codice in base a parametri determinati a run-time.
Similarmente ai puntatori a funzione esistono le funzioni oggetto o funtori, che possono essere usati in maniera simile. I funtori sono più potenti dei puntatori a funzione perché possono contenere i propri valori.
Alcuni linguaggi "puramente" ad oggetti (come java) non supportano i puntatori a funzione. Qualcosa di simile può essere implementato in questi tipi di linguaggi, sebbene, usando le reference alle interfacce questo definisce una singola funzione membro. Linguaggi Microsoft .NET come il C# e il Visual Basic .NET implementano dei puntatori a funzione type safe con i delegate.
In altri linguaggi che supportano le funzioni first-class, le funzioni sono trattate come dati e possono essere passate, ritornate e create dinamicamente da altre funzioni, eliminando la necessità di puntatori a funzione.
L'uso eccessivo di puntatori a funzione può produrre un rallentamento del codice sui processori moderni, perché la branch prediction può non essere in grado di prevedere quale ramo verrà preso (dipende infatti dal valore del puntatore a funzione a run-time), sebbene questo effetto possa essere compensato per ridurre le ricerche nelle tabelle di lookup.