嵌入式-C语言基础:函数指针

定义函数地址:如果在程序中定义了一个函数,那么在编译的时候,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(也叫入口地址)称为这个函数的地址。

和数组一样,数组名代表地址,而函数名表示函数地址。

函数的调用:可以通过函数名直接调用,也可以通过函数指针间接调用。

函数指针定义:函数返回值类型 (*函数指针变量名)(参数列表);   如:int (*p)(int data);其中,参数名可以省略不写

函数指针调用:(*函数指针变量名)(实参)

#include<stdio.h>

//定义函数
void PrintData()
{
    printf("Hello WOrld\n");
}

int  main()
{
    void (*p)();//定义函数指针
    p=PrintData;//让函数指针指向该函数
    (*p)();//间接调用函数
    PrintData();//直接调用函数
}

调用函数,打印两次:

Hello WOrld
Hello WOrld

通过函数指针来实现回调函数:

#include<stdio.h>

//定义函数

int GetMax(int a,int b)
{
    return a>b?a:b;
}
int GetMin(int a,int b)
{
    return a<b?a:b;
}
int GetAverage(int a,int b)
{
    return (a+b)/2;
}
//回调函数
int DataHandler(int a,int b,int (*pfunc)(int a,int b))
{
    int ret;
    ret=(*pfunc)(a,b);//调用函数
    return ret;
}

int  main()
{
    int (*pfunc)(int a,int b);//定义函数指针
    int m;
    int ret;
    printf("请输入m:\n");
    scanf("%d",&m);
    switch(m)
    {
        case 0:
            pfunc=GetMax;
        break;
        case 1:
            pfunc=GetMin;
        break;
        case 2:
            pfunc=GetAverage;
        break;
        default:
            exit(-1);//退出程序,后面的代码不执行
    }
    //调用回调函数
    ret=DataHandler(10,20,pfunc);
    printf("%d\n",ret);
    return 0;
}

 

输出结果:

请输入m:
1
10
请输入m:
2
15

 

posted @ 2022-10-26 21:58  WellMandala  阅读(55)  评论(0编辑  收藏  举报