指针函数
指针函数是指返回类型为函数指针类型
function函数返回一个返回值为空,参数值为int类型的函数指针。
1
| void (*fun)(int) funtion();
|
函数指针
函数指针:指向函数入口的指针
函数指针的定义
函数返回值 (*point)(参数类型);
1
| int (*FUNC_POINT)(float);
|
上面代码声明了一个返回值为int,参数类型为float的函数指针
typedef与函数指针
1 2
| typedef int(*func)(int) FUNC; FUNC f1;
|
函数指针的初始化
1 2 3 4 5 6 7 8 9
| #include<stdio.h> int add(int x,int y){ printf("%d+%d=%d\n",x,y,x+y); } int main(){ int (*func)(int,int); func=add; func(1,2); }
|
1 2 3 4 5 6 7 8 9
| #include<stdio.h> int add(int x,int y){ printf("%d+%d=%d\n",x,y,x+y); } int main(){ int (*func)(int,int); func=add; func(1,2); }
|
函数指针数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<stdio.h>
int add(int x,int y){ printf("%d+%d=%d\n",x,y,x+y); } int sub(int x,int y){ printf("%d-%d=%d\n",x,y,x-y); } int main(){ int (*func[2])(int,int)={add,sub}; for(int i=0;i<2;i++){ func[i](5,4); } }
|
数组func中存放着函数指针变量add和sub
函数指针作为函数参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include<stdio.h> void success(void){ printf("sucess\n"); }
void error(void){ printf("error\n"); } void function(void (*func)(void)){ func(); }
int main(){ function(success); function(error); }
|
函数指针可以作为回调函数使用,让函数调用不同的函数
结构体中使用函数指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include<stdio.h> #define num 5 struct Grade{ float (*get_avg_score)(int []); }; float get_avg_score(int arr[]){ int sum=0; float avg=0; for(int i=0;i<num;i++){ sum+=arr[i]; } avg=sum*1.0/num; printf("%f\n",avg); return avg; } int main(){ struct Grade MyGrade; float avg; int source[num]; for(int i=0;i<num;i++){ source[i]=i*10; } MyGrade.get_avg_score=get_avg_score; avg=MyGrade.get_avg_score(source); return 0; }
|
结构体中并不能直接定义函数,但可以定义函数指针,在结构体初始化时可以把功能函数的地址赋给函数指针,达到结构体成员为函数的功能。