指向函数的指针是一个指针变量,它指向一个函数。一个函数名是一个指针,它指向函数的代码。函数的调用可以通过函数名,也可以通过指向该函数的指针。
指向函数的指针其定义的一般形式为:
类型名 (*指针变量名)();
例如:
int (*p)(int i, int j);
p是一个指针,它指向一个函数,该函数有两个整型参数,返回类型为int .
注:
int *p(int i, int j);
这是一个函数声明,返回类型为int型指针。
1、函数指针的简单使用:
//函数指针的使用 #include <stdio.h> #define GET_MAX 0 #define GET_MIN 1 int get_max(int i, int j) { return i > j ? i : j; } int get_min(int i, int j) { return i < j ? i : j; } int compare(int i, int j, int flag) { int result; int (*p)(int, int); //函数指针 if (flag == GET_MAX) { p = get_max; } else { p = get_min; } result = p(i, j); return result; } int main(void) { int i = 5, j = 10, result; result = compare(i, j, GET_MAX); printf("The MAX is %d", result); return 0; }
注意:
(1)不能对指向函数的指针作任何运算,如:p++ , p--, 等。
(2)指向函数的指针能通过同类型的函数(参数相同,返回值相同)名、函数指针、NULL来初始化或赋值。NULL表示该指针不指向任何函数。
2、函数指针作形参
#include <stdio.h> int get_big(int i, int j) { return i > j ? i : j; } int get_max(int i, int j, int k, int (*p)(int, int)) //函数指针作形参 { int ret; ret = p(i, j); ret = p(ret,k); return ret; } int main(void) { int i = 5; int j = 10; int k = 15; int ret; ret = get_max(i, j, k, get_big); printf("The MAX is %d", ret); return 0; }
3、返回函数指针的函数
#include <stdio.h> int get_big(int i, int j) { return i > j ? i : j; } int (*get_func(int a))(int , int) //返回函数指针的函数 { printf("The number is %d", a); return get_big; } int main(void) { int i = 5, j = 10, max; int (*p)(int , int); p = get_func(100); max = p(i, j); printf("MAX is %d", max); return 0; }
get_func(int a)是有一个整型参数的函数。它的返回值为 int(*)(int , int) 即返回一个指向函数的指针,该指针所指函数有两个整型参数。