函数指针
在C语言中,一段函数会占用一段内存空间,在C语言转成汇编以后,可以发现函数名本质上是函数的入口首地址
既然是地址,那就可以把这个地址赋予一个指针变量,使指针指向需要执行函数的起始地址,然后就可以通过该指针调用该函数,此时该指针就为函数指针
下面举个简单例子来演示函数指针的调用:
#include<stdio.h>
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int x;
int y;
int (*p)(int ,int); //注意括号的优先级大于*
p=&max;
scanf("%d %d",&x,&y);
printf("max value:%d",(*p)(x,y));
}
注意,由于C语言中的(*p)(x,y)亦可以写作p(x,y),前者的语法更加规范,但是为了方便书写,编译器允许写成后一种的语法,其实规范的是前者
p=&max;亦可写成p=max;
为了方便,通常采用typedef定义函数指针
typedef int (*pfunc)(int,int);
pfunc p;
等价于
int (*p)(int ,int); //注意括号的优先级大于*
函数指针实现的回调函数
#include<stdio.h>
int CallbackFunction1()
{
printf("This is CallBack Function1\n");
return 0;
}
int CallbackFunction2()
{
printf("This is CallBack Function2\n");
return 0;
}
int Handle(int (*p)())
{
(*p)();
return 0;
}
int main()
{
Handle(CallbackFunction1);
Handle(CallbackFunction2);
}
下一篇将会给出具体例子来分析函数指针的实用价值: