0Pricing
C Academy · Lección

Declaración de punteros a funciones

Punteros a funciones

Declaración de punteros a funciones es una lección gratuita de C Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.

Las funciones tienen direcciones

Al igual que los datos, cada función se encuentra en una dirección de memoria. Un puntero a función almacena esa dirección para que pueda llamar a la función indirectamente.

#include <stdio.h>

void greet(void) { printf("hello\n"); }

int main(void) {
    void (*fp)(void) = greet;
    fp();
    return 0;
}

Leer la declaración

La declaración int (*fp)(int) significa que fp es un puntero a una función que recibe un int y devuelve un int.

Los paréntesis alrededor de *fp son obligatorios.

#include <stdio.h>

int square(int x) { return x * x; }

int main(void) {
    int (*fp)(int) = square;
    printf("%d\n", fp(5));
    return 0;
}

Asignar una función

El nombre de una función se convierte en su dirección, por lo que fp = square y fp = &square son equivalentes.

#include <stdio.h>

int dbl(int x) { return x * 2; }

int main(void) {
    int (*fp)(int);
    fp = &dbl;
    printf("%d\n", fp(7));
    return 0;
}

Llamar mediante el puntero

Puede llamar mediante un puntero a función usando fp(args) o la forma explícita (*fp)(args). Ambas hacen lo mismo.

#include <stdio.h>

int add1(int x) { return x + 1; }

int main(void) {
    int (*fp)(int) = add1;
    printf("%d\n", fp(10));
    printf("%d\n", (*fp)(10));
    return 0;
}

La firma debe coincidir

El tipo de un puntero a función incluye el tipo de retorno y los tipos de los parámetros. Solo puede asignarle una función cuya firma coincida exactamente.

#include <stdio.h>

double half(double x) { return x / 2.0; }

int main(void) {
    double (*fp)(double) = half;
    printf("%f\n", fp(9.0));
    return 0;
}

Reasignar durante la ejecución

Un puntero a función es una variable, por lo que puede apuntar a distintas funciones mientras el programa se ejecuta.

#include <stdio.h>

int inc(int x) { return x + 1; }
int dec(int x) { return x - 1; }

int main(void) {
    int (*op)(int) = inc;
    printf("%d\n", op(5));
    op = dec;
    printf("%d\n", op(5));
    return 0;
}

Elegir según una condición

Seleccione la función que se llamará según un valor obtenido durante la ejecución y, después, invoque la función mediante un único puntero.

#include <stdio.h>

int plus(int a) { return a + 10; }
int minus(int a) { return a - 10; }

int main(void) {
    int up = 1;
    int (*op)(int) = up ? plus : minus;
    printf("%d\n", op(100));
    return 0;
}

typedef para mejorar la legibilidad

La sintaxis de los punteros a función es extensa. Un typedef asigna un nombre al tipo y hace más claras las declaraciones.

#include <stdio.h>

typedef int (*IntOp)(int);

int triple(int x) { return x * 3; }

int main(void) {
    IntOp op = triple;
    printf("%d\n", op(4));
    return 0;
}

Funciones de dos argumentos

Los punteros a función pueden describir cualquier firma. Este es un ejemplo para una operación binaria con enteros.

#include <stdio.h>

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

int main(void) {
    int (*op)(int, int) = sum;
    printf("%d\n", op(3, 4));
    return 0;
}

Un puntero a función nulo

Al igual que los punteros a datos, un puntero a función puede ser NULL. Compruebe siempre el puntero antes de llamar a una función que podría no estar asignada.

#include <stdio.h>

int twice(int x) { return x * 2; }

int main(void) {
    int (*op)(int) = NULL;
    if (op == NULL) op = twice;
    if (op) printf("%d\n", op(8));
    return 0;
}

Imprimir la dirección

Puede inspeccionar la dirección almacenada. Las distintas funciones tienen direcciones diferentes.

#include <stdio.h>

int f(int x) { return x; }

int main(void) {
    int (*fp)(int) = f;
    printf("function pointer is %s\n", fp ? "set" : "null");
    return 0;
}

Comprobación rápida

Compruebe su comprensión de las declaraciones de punteros a función.

Resumen

Ha aprendido a declarar y usar punteros a función:

  • Sintaxis: ret (*name)(params), con paréntesis obligatorios.
  • Asigne usando el nombre de la función, que se convierte en una dirección.
  • Llame con fp(args) o (*fp)(args).
  • La firma debe coincidir; typedef mejora la legibilidad.

Preguntas frecuentes

¿La lección «Declaración de punteros a funciones» es gratis?

Sí — el texto completo de «Declaración de punteros a funciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Declaración de punteros a funciones»?

Punteros a funciones Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C Academy?

No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Declaración de punteros a funciones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C Academy?

Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Declaración de punteros a funciones
  2. Paso de funciones
  3. qsort con comparadores
  4. Tablas de punteros a funciones
← Volver a C Academy