指针函数:返回类型是指针的函数!
int * fun(int x); //返回的类型是指针的函数。
函数指针:指向一个函数的指针!
int (*fun)(int x); //函数指针。返回值类型 (*指针变量名)(形参列表)
函数指针本身是指针变量。只不过指向函数。
函数指针:
例1:用typedef定义函数指针
typedef 返回类型(*新类型)(参数表)
typedef 返回类型(*新类型)(参数表)
typedef char (*PTRFUN)(int);
PTRFUN pFun; //第二行的代码便使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。
char glFun(int a){
return;
}
void main(){
pFun = glFun;
(*pFun)(2);
}
typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。
例子:函数指针的使用。
#include<stdio.h> typedef int (*FP_CALC)(int, int); //声明一个变量类型FP_CALC,FP_CALC是一个指向函数的指针。函数有两个int型参数,并返回int int add(int a, int b){ //函数名就是该函数所占内存的首地址。 return a + b; } int sub(int a, int b){ return a - b; } int mul(int a, int b){ return a * b; } int div(int a, int b){ return b? a/b : -1; } FP_CALC calc_func(char op){ //op为'+',根据op的值返回函数的地址。返回值的类型为函数指针。 switch (op){ case '+': return add; //函数名就是该函数所占内存的首地址。 case '-': return sub; case '*': return mul; case '/': return div; default: return NULL; } return NULL; } int calc(int a, int b, char op){ FP_CALC fp = calc_func(op); //fp是函数指针,类型是函数指针类型。op为'+',calc_func函数返回值是add if (fp) return fp(a, b); //如何通过函数指针,使用函数。 else return -1; } void main(){ int a = 100, b = 20; printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+')); //调用calc函数。 printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-')); printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*')); printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/')); } 运行结果 calc(100, 20, +) = 120 calc(100, 20, -) = 80 calc(100, 20, *) = 2000 calc(100, 20, /) = 5 |
例子2:函数指针的使用。
#include <stdio.h> void printWelcome(int len){ printf("欢迎欢迎 -- %d/n", len); } void printGoodbye(int len){ printf("送客送客 -- %d/n", len); } void callback(int times, void (* print)(int)){ //定义函数指针类型print,指向这样一种函数:参数是int型,返回类型为void。 int i; for (i = 0; i < times; ++i){ print(i); //通过函数指针print来使用函数。 } printf("/n我不知道你是迎客还是送客!/n/n"); } void main(void){ callback(10, printWelcome); //调用callback函数,将 printWelcome传给函数指针。这样函数指针就可以使用函数了。 callback(10, printGoodbye); printWelcome(5); } |
指针函数:
返回值是指针。这个也不常用。