C语言中如何将函数作为参数传递给别的函数

2018-05-14  本文已影响0人  王伯卿

我们先写一个简单的求和函数,该函数接受两个整型,返回两个数的和。

#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的函数式编程,指向函数的指针做参数,好像颇有函数式编程的味道。

上一篇 下一篇

猜你喜欢

热点阅读