我们先写一个简单的求和函数,该函数接受两个整型,返回两个数的和。
#include <stdio.h>
int add(int a,int b);
int main(void){
int result = add(1,2);
printf("%d\n",result);
return 0;
}
int add(int a,int b){
return a+b;
}
现在我们把我们写好的add函数作为参数传给另一个函数。这里我们需要声明一个指向函数的指针,才可以完成这样的操作。
#include <stdio.h>
int add(int a,int b);
// add_2接受三个参数,第一个是一个整型,第一个也是一个整型,第三个是一个指向函数的指针
// 这个指针所指向的函数接受两个参数,都是int
int add_2(int a, int b, int(*ptr)(int a,int b));
int main(void){
int result = add_2(1,2,add);
printf("%d\n",result);
return 0;
}
int add(int a,int b){
return a+b;
}
int add_2(int a, int b, int(*ptr)(int a,int b)){
int result;
return result = ptr(a,b);
}
函数指针和指针函数两个是完全不一样的,但是这样的命名实在令人讨厌,其实这并不有多难分辨。反之永远不要这么命名。宁愿多说几个字。
比如指向函数的指针,或者一个返回类型为指针的函数。看下面这两句完全是不一样的。
int *func(int a, int b) ; //这个声明的是一个函数
int (*func)(int a, int b); //这个声明的是一个指针变量
就像注释里写的一个,声明一个函数,需要在后面补充,但是声明一个变量就不用了。
突然想到了js的函数式编程,指向函数的指针做参数,好像颇有函数式编程的味道。








网友评论