定义方法
指针函数: 函数类型 *函数名(形参列表)
函数指针: 函数类型 (*指针变量名)(形参列表)
指针函数的实质就是一个函数,不过它的返回值是指针。所以重点谈一下函数指针。
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占存储空间,都有相应的地址。可以使用指针指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针称为函数指针,它的定义方法如上。
上面的红色部分就是函数指针的名称,函数类型指的是该指针指向的函数的返回类型。形参列表指的是该指针指向的函数的形参列表。
注意:函数指针和它指向的函数的参数个数及类型必须一致。
如 int (*fu)(int x); /*定义一个函数指针*/
函数指针的赋值
函数指针名代表了函数代码的首地址,因此赋值时直接将函数指针指向函数名就行了。例如:
int func(int x); /*声明一个函数*/
int (*fu)(int x); /*声明一个函数指针*/
fu = func;
赋值时func不带括号以及参数,因为func代表函数的首地址,fu = func就是一个地址赋给一个指针。
定义函数指针类型
typedef int (*PTRFUN)(int a); //第一
它相当于
typedef int (*)(int a) PTRFUN; //第二
但是这样写显然很乱,让人一眼看不清,所以就固定成第一种形式。它和
int (*fu)(int a);
的区别是后者只是定义了一个函数指针,而前者是定义了函数指针类型PTRFUN,可以用它来定义其它函数指针,如
PTRFUN pFun;
函数指针变量常见的用途是把函数指针作为参数传给其它函数,而这些“其它函数”除了函数指针这个参数以外一般还有其它参数,而此函数指针指向的函数往往就是处理这些“其它参数”的。例
- #include<stdio.h>
- max(int x, int y)
- {
- int z;
- if(x>y) z=x;
- else z=y;
- return (z);
- }
- min(int x, int y)
- {
- int z;
- if(x<y) z=x;
- else z=y;
- return (z);
- }
- add(int x, int y)
- {
- int z;
- z=x+y;
- return (z);
- }
- process(int x, int y, int (*fun)(int, int))
- {
- int result;
- result=(*fun)(x,y);
- printf("%d\n", result);
- }
- main()
- {
- int max(int, int);
- int min(int, int);
- int add(int, int);
- int a,b;
- printf("enter a and b:");
- scanf("%d,%d",&a,&b);
- printf("max=");
- process(a,b,max);
- printf("min=");
- process(a,b,min);
- printf("sum=");
- process(a,b,add);
- }
运行结果: