Les fonctions étant des objets, comme les tableaux et d'autres structures de données, il est utile de pouvoir les passer en argument à des fonctions. C'est notamment indispensable pour écrire des algorithmes numériques généraux.
Par exemple, on écrira la fonction newton avec deux paramètres fonctionnels pour la fonction f dont on calcule un zéro et sa dérivée fprime :
double newton(double f(double),
double fprime(double),
int n, double x0) {
if (n == 0) {
return x0;
} else {
double x = newton(f,fprime,n-1,x0);
return x - f(x)/fprime(x);
}
}
Techniquement, la valeur qui est passée en argument à une fonction n'est pas l'objet fonctionnel (le code) lui-même, mais l'adresse de ce code en mémoire, exactement comme pour les tableaux.