函数指针

作者: 风情云 | 来源:发表于2020-03-18 18:18 被阅读0次

函数指针

函数指针就是指向函数的一个指针,函数名就是一个地址,定义一个指针指向函数体,此指针就是函数指针。

定义与使用

//定义一个函数
void func(void)
{
    printf("error\n");
}
int main()
{
    //第一种方法
    typedef void F1(void);
    F1 *f1 = func;
    //第二种方法
    typedef void (*F2)(void);
    F2 f2 = func;
    //第三种方法 (常用)
    void (*f3)(void) = func;
    //使用函数指针,也称为仿函数
    f3();
    return 0;
}

函数指针的定义与数组指针有点类似,也都是有三种方法。要注意指向函数体的返回值与形参列表,两者要一致,如果实现带形参的指针类型指向不带形参的函数体,语法没有错,但是,运行可能出错。所以要返回类型与形参列表要一致。

函数指针当作形参

void func(int n)
{
    printf("n = %d\n",n);
}
//函数指针当作形参
void test(void (*f)(int),int n)
{
    f(n);
}
int main()
{
    void (*f)(int n) = func;
    test(f,4);
    return 0;
}

函数指针当作形参可以实现回调函数,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。该函数可以当作中间函数,中间函数自己并没有实现,而是调回其他函数来实现。


回调函数

函数跳转表

#include <stdio.h>
#include <stdlib.h>

int add(int a,int b)
{
    return a+b;
}
int subtract(int a,int b)
{
    printf("%d\n",a-b);
    return a-b;
}
int multiply(int a,int b)
{
    return a*b;
}
void table()
{
    //定义函数跳转表
        //函数指针数组
    int (*func[3])(int,int) = {add,subtract,multiply};
    char ch[3] = {'+','-','*'};
    printf("请输入运算\n");
    int a,b;
    char c;
    scanf("%d%c%d",&a,&c,&b);
    int i;
    int num = sizeof(ch)/sizeof(ch[0]);
    for(i=0;i<num;i++)
    {
        if(c == ch[i])
        {
            //使用跳转表
            int l = func[i](a,b);
            printf("%d\n",l);
            break;
        }
    }
}
int main()
{
    table();
    return 0;
}

函数跳转表

使用函数跳转表可以不需要i多层f else语句判断,看起来很凌乱,维护起来也比较麻烦,增加函数只需在跳转表登记函数名就可以,看起来也比较舒服。


微信号

相关文章

  • 函数和指针

    函数指针: 指向函数的指针(是指针)指针函数:返回值是指针的函数(是函数)

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • 指针

    一. 指针指向的是对象的地址//函数指针:指针指向函数//指针函数:函数返回指针 二.

  • C:函数指针的坑

    关于该死的函数指针和指针函数 先来个目录 常量指针、指针常量 数组指针、指针数组 函数指针、指针函数 1、先看第一...

  • C语言基础知识点

    函数指针与回调函数 1、函数指针:函数指针是指向函数的指针变量,以下实例声明了函数指针变量 p,指向函数 max:...

  • NDK启航篇——C语言基础(函数指针)

    昨天介绍了指针类型、空指针、指针运算,今天来写一下函数指针 函数指针 函数指针的定义:函数的返回值类型(函数指针的...

  • C语言基础---函数指针和回调函数

    版权声明:本文为小斑马伟原创文章,转载请注明出处!函数指针:函数指针 是指向函数的指针。指针函数:指针函数 函数...

  • Redis

    1.指针函数与函数指针 指针函数本质是指针,其返回值是指针。如 float *fun(); 函数指针,本质是指针。...

  • C++:函数指针 & 返回函数指针的函数

    函数指针 & 返回函数指针的函数 一、函数指针的声明和使用 声明一个函数指针,给它赋值并调用它指向的函数 函数指针...

  • 函数指针

    一.函数指针,指针指向函数 二.函数指针做参数

网友评论

    本文标题:函数指针

    本文链接:https://www.haomeiwen.com/subject/ftmcyhtx.html