C语言中的函数指针本身是指针变量,该指针变量指向函数。正如用指针变量指向整型、字符型、数组数据一样,这里是指向函数的入口地址。
C语言程序在编译时,每一个函数在内存中都有一个入口地址,该入口地址就是函数指针所指向的地址。
有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量调用其他类型的变量一样,例如:
void (*pfun)(int data); //定义一个函数指针
void myfun(int data); //声明函数
pfun = myfun; //将myfun()函数的首地址赋给指针变量pfun
(*pfun)(100); //通过函数指针调用函数
上面的例子先定义了一个函数指针,这个函数指针的返回值为 void 型,然后声明该函数;再给函数指针变量 pfun 赋值 myfun,也就是 myfun() 函数的首地址,myfun() 函数名就是 myfun() 函数的首地址,此时指针变量 pfun 获得了 myfun() 函数的调用入口地址,最后调用(*pfun)(100);也就相当于调用了 myfun() 函数。
【实例】通过函数指针调用函数。代码如下:
#include
int Max(int x, int y) //函数声明和定义
{
int z;
if (x > y)
z = x;
else
z = y;
return z;
}
int main(void)
{
int(*p)(int, int); //定义一个函数指针
int a = 1, b = 2, c;
p = Max; //把函数Max()的首地址赋给指针变量p, 使p指向Max()函数
c = (*p)(a, b); //通过函数指针调用Max()函数
printf("The max is %d\n", c);
return 0;
}
编译运行,结果如下:
The max is 2
admin