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