Menu
Coddy logo textTech

Llamada a punteros a funciones

Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 34 de 61.

Ahora que sabes cómo declarar un puntero a función y asignarle una función, el siguiente paso es llamar realmente a la función mediante ese puntero.

La sintaxis es sencilla. Usas el puntero a función igual que llamarías a una función normal:

int add(int a, int b) {
    return a + b;
}

int main() {
    int (*operation)(int, int) = add;
    
    int result = operation(5, 3);  // Llama a add(5, 3)
    printf("%d\n", result);        // Salida: 8
    return 0;
}

Simplemente escribe el nombre del puntero seguido de paréntesis que contengan los argumentos. C desreferencia automáticamente el puntero y ejecuta la función a la que apunta.

También puedes usar la sintaxis de desreferenciación explícita con (*operation)(5, 3), pero es opcional y menos común. Ambas formas producen resultados idénticos.

El verdadero poder surge cuando reasignas el puntero a diferentes funciones:

int subtract(int a, int b) {
    return a - b;
}

operation = subtract;
result = operation(5, 3);  // Ahora llama a subtract(5, 3)
printf("%d\n", result);    // Salida: 2

La misma variable operation ahora ejecuta una lógica completamente diferente. Esta capacidad de intercambiar el comportamiento en tiempo de ejecución es la base del polimorfismo en C.

challenge icon

Desafío

Fácil

Practiquemos cómo llamar a funciones mediante punteros y cómo cambiar qué función se ejecuta. Crearás una calculadora sencilla que puede alternar entre suma y resta durante la ejecución.

Escribe un programa que:

  1. Defina dos funciones:
    • add: recibe dos parámetros int y devuelve su suma
    • subtract: recibe dos parámetros int y devuelve el primero menos el segundo
  2. En main, declare un puntero a función llamado calc que pueda apuntar a funciones que reciban dos parámetros int y devuelvan un int
  3. Lea cuatro entradas: dos enteros y dos códigos de operación
  4. Para cada código de operación:
    • Asigne la función correspondiente a calc (1 para sumar, 2 para restar)
    • Llame a la función mediante el puntero usando los dos números
    • Imprima el resultado

Recibirás cuatro entradas: el primer número, el segundo número, el primer código de operación (1 o 2) y el segundo código de operación (1 o 2).

Tu salida debe mostrar dos resultados en líneas separadas: uno por cada operación realizada usando los mismos dos números:

15
5

En este ejemplo, con las entradas 10, 5, 1, 2: la primera operación (código 1) suma 10 + 5 = 15, después se reasigna el puntero y la segunda operación (código 2) resta 10 - 5 = 5.

Esto demuestra cómo la misma variable de puntero puede ejecutar una lógica completamente diferente al reasignarla entre llamadas.

Pruébalo tú mismo

#include <stdio.h>

// TODO: Define la función add aquí


// TODO: Define la función subtract aquí


int main() {
    // Leer entradas
    int num1, num2, op1, op2;
    scanf("%d", &num1);
    scanf("%d", &num2);
    scanf("%d", &op1);
    scanf("%d", &op2);
    
    // TODO: Declara un puntero a función llamado 'calc' que pueda apuntar a
    // funciones que toman dos parámetros int y devuelven un int
    
    
    // TODO: Para el primer código de operación (op1):
    // - Asigna la función apropiada a calc (1 para add, 2 para subtract)
    // - Llama a la función a través del puntero e imprime el resultado
    
    
    // TODO: Para el segundo código de operación (op2):
    // - Reasigna calc a la función apropiada
    // - Llama a la función a través del puntero e imprime el resultado
    
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online