c 指针函数 vs 函数指针
程序员文章站
2022-08-11 15:34:10
指针函数,函数指针 ......
指针函数,函数指针
#include <stdio.h> int max(int a, int b){ return a > b ? a : b; } //函数指针,2个int参数,int返回值 int(*pfun)(int, int); //函数的第三个参数是函数指针,int返回值 int fun(int a, int b, int(*f)(int, int)){ return (*f)(a,b); } //这是指针(返回值是指针)函数,函数的第三个参数是函数指针,int*返回值 int* fun2(int a, int b, int(*f)(int, int)){ static int i; i = (*f)(a,b); return &i; } //这是指针函数,返回函数指针,返回的函数指针,指向的函数为返回值为int, 2个int参数。这个函数有3个参数,前2个是int参数,第三个参数是函数指针,指向的函数为int返回值,2个int参数。 //完全理解不了 int(*fun1(int a, int b, int(*f)(int, int)))(int, int){ return f; } //下面的是很容理解的,但是编译不过,返回值是函数指针,指向的函数为返回值为int, 2个int参数。函数名为fun1,有3个参数,第三个参数是函数指针,指向的函数为返回值为int, 2个int参数。 //int(*)(int, int) fun4(int a, int b, int(*f)(int, int)){ // return f; //} //下面的typedef含义是用,声明了一个新的类型叫pf,它是函数指针,所指向的函数为int返回值,2个int参数。 typedef int(*pf)(int,int); //pf为fun3的返回值,第三个参数的类型为pf,完美的解决了上面的fun4不能编译通过的问题 pf fun3 (int a, int b, pf f){ return f; } int main(){ pfun = &max; int i; i = (*pfun)(3,2); printf("%d\n", i); i = fun(23,34, max); printf("%d\n", i); int *j; j = fun2(43,56,max); printf("j = %d\n", *j); pfun = fun1(23,44,max); i = (*pfun)(45,67); printf("pfun %d\n", i); pfun = fun3(23,44,max); i = (*pfun)(451,267); printf("pfun %d\n", i); }
下一篇: 发挥语言的威力--融合PHP与ASP