Menu
Coddy logo textTech

Chamando Ponteiros para Funções

Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 34 de 61.

Agora que você sabe como declarar um ponteiro para função e atribuir uma função a ele, o próximo passo é chamar a função por meio desse ponteiro.

A sintaxe é simples. Você usa o ponteiro para função da mesma forma que chamaria uma função comum:

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

int main() {
    int (*operation)(int, int) = add;
    
    int result = operation(5, 3);  // Chama add(5, 3)
    printf("%d\n", result);        // Saída: 8
    return 0;
}

Basta escrever o nome do ponteiro seguido por parênteses contendo os argumentos. C automaticamente desreferencia o ponteiro e executa a função para a qual ele aponta.

Você também pode usar a sintaxe de desreferenciação explícita com (*operation)(5, 3), mas isso é opcional e menos comum. Ambas as formas produzem resultados idênticos.

O verdadeiro poder surge quando você reatribui o ponteiro a funções diferentes:

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

operation = subtract;
result = operation(5, 3);  // Agora chama subtract(5, 3)
printf("%d\n", result);    // Saída: 2

A mesma variável operation agora executa uma lógica completamente diferente. Essa capacidade de trocar o comportamento em tempo de execução é a base do polimorfismo em C.

challenge icon

Desafio

Fácil

Vamos praticar a chamada de funções por meio de ponteiros e a troca da função que será executada. Você criará uma calculadora simples que pode alternar entre adição e subtração em tempo de execução.

Escreva um programa que:

  1. Defina duas funções:
    • add: recebe dois parâmetros int e retorna a soma deles
    • subtract: recebe dois parâmetros int e retorna o primeiro menos o segundo
  2. Em main, declare um ponteiro de função chamado calc que possa apontar para funções que recebem dois parâmetros int e retornam um int
  3. Leia quatro entradas: dois inteiros e dois códigos de operação
  4. Para cada código de operação:
    • Atribua a função apropriada a calc (1 para adição, 2 para subtração)
    • Chame a função por meio do ponteiro com os dois números
    • Imprima o resultado

Você receberá quatro entradas: o primeiro número, o segundo número, o primeiro código de operação (1 ou 2) e o segundo código de operação (1 ou 2).

Sua saída deve mostrar dois resultados em linhas separadas: um para cada operação realizada usando os mesmos dois números:

15
5

Neste exemplo, com as entradas 10, 5, 1, 2: a primeira operação (código 1) soma 10 + 5 = 15; em seguida, o ponteiro é reatribuído, e a segunda operação (código 2) subtrai 10 - 5 = 5.

Isso demonstra como a mesma variável de ponteiro pode executar uma lógica completamente diferente ao ser reatribuída entre as chamadas.

Experimente você mesmo

#include <stdio.h>

// TODO: Defina a função add aqui


// TODO: Defina a função subtract aqui


int main() {
    // Ler as entradas
    int num1, num2, op1, op2;
    scanf("%d", &num1);
    scanf("%d", &num2);
    scanf("%d", &op1);
    scanf("%d", &op2);
    
    // TODO: Declare um ponteiro de função chamado 'calc' que possa apontar para
    // funções que recebem dois parâmetros int e retornam um int
    
    
    // TODO: Para o primeiro código de operação (op1):
    // - Atribua a função apropriada a calc (1 para add, 2 para subtract)
    // - Chame a função através do ponteiro e imprima o resultado
    
    
    // TODO: Para o segundo código de operação (op2):
    // - Reatribua calc à função apropriada
    // - Chame a função através do ponteiro e imprima o resultado
    
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C online