3.10.3. Uso de un puntero a función

Una vez que se ha definido un puntero a función, debe asignarle la dirección de una función antes de poder usarlo. Del mismo modo que la dirección de un array arr[10] se obtiene con el nombre del array sin corchetes (arr), la dirección de una función func() se obtiene con el nombre de la función sin lista de argumentos (func). También puede usar una sintáxis más explícita: &func(). Para invocar la función, debe dereferenciar el puntero de la misma forma que lo ha declarado (recuerde que C y C++ siempre intentan hacer que las definiciones se parezcan al modo en que se usan). El siguiente ejemplo muestra cómo se define y usa un puntero a función:

//: C03:PointerToFunction.cpp
// Defining and using a pointer to a function
#include <iostream>
using namespace std;

void func() {
  cout << "func() called..." << endl;
}

int main() {
  void (*fp)();  // Define a function pointer
  fp = func;  // Initialize it
  (*fp)();    // Dereferencing calls the function
  void (*fp2)() = func;  // Define and initialize
  (*fp2)();
} ///:~

Listado 3.65. C03/PointerToFunction.cpp


Una vez definido el puntero a función fp, se le asigna la dirección de una función func() usando fp = func (fíjese que la lista de argumentos no aparece junto al nombre de la función). El segundo caso muestra una definición e inicialización simultánea.