给大家举一个例子:
- int Func(int x); /*声明一个函数*/
- int (*p) (int x); /*定义一个函数指针*/
- p = Func; /*将Func函数的首地址赋给指针变量p*/
- p = &Func; /*将Func函数的首地址赋给指针变量p*/
赋值时函数 Func 不带括号,也不带参数。由于函数名 Func 代表函数的首地址,因此经过赋值以后,指针变量 p 就指向函数 Func() 代码的首地址了。
下面来写一个程序,看了这个程序你们就明白函数指针怎么使用了:
- #include <stdio.h>
- int Max(int, int); //函数声明
- int main(void)
- {
- int(*p)(int, int); //定义一个函数指针
- int a, b, c;
- p = Max; //把函数Max赋给指针变量p, 使p指向Max函数
- printf("please enter a and b:");
- scanf("%d%d", &a, &b);
- c = (*p)(a, b); //通过函数指针调用Max函数
- printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
- return 0;
- }
- int Max(int x, int y) //定义Max函数
- {
- int z;
- if (x > y)
- {
- z = x;
- }
- else
- {
- z = y;
- }
- return z;
- }
特别注意的是,因为函数名本身就可以表示该函数地址(指针),因此在获取函数指针时,可以直接用函数名,也可以取函数的地址。
- p = Max可以改成 p = &Max
- c = (*p)(a, b) 可以改成 c = p(a, b)
|