指针函数:
首先它是一个函数,从中文语法上理解,指针是用来修饰这个函数的,这个函数的返回值是一个指针
例如:
int result;
int *fcn(int x,int y)
{
result = x + y;
return &result;
}
上述函数中在调用该函数时会返回一个int类型的指针,
用处:
在C语言中函数只允许return回一个变量,当需要一次返回多个结果时,就可以把结果放在一个数组或者一个结构体中,在函数最后返回这个数组或者结构体的指针,做到一次返回多个计算结果,且不违背C语言一次只能返回一个变量的规则,因为指针也是一个变量。
函数指针:
首先它是一个指针,从中文语法上理解,函数是用来修饰这个指针的,这个指针指向了一个函数
例如:
int(* fcn)(int x, int y);
这个函数指针的类型是 int(* )(int x, int y),在上述代码中用该类型声明了一个函数指针fcn。
用处:
1.使用函数指针指向另一个函数.
int add(int a,int b)
{
int c;
c=a+b;
return c;
}
假设有一个函数add,那么在使用时就可以使用函数指针fcn指向这个函数:
int main()
{
int(* fcn)(int x, int y);//定义一个函数指针变量fcn
fcn = &add;
printf("%d",*fcn(1,2));
return 0;
}
上面这段代码就是使用fcn指向了求和函数add,打印的时候打印fcn的计算结果实际上就是打印add的计算结果。
2.函数指针可以用在回调函数中。
回调函数是把一个函数作为另一个函数的参数,此时就可以使用函数指针将函数作为参数传递给另一个函数,例如:
typedef int(* fcn_type)(int x,int y);
首先使用typedef将函数指针类型int(* )(int x, int y)定义为fcn_type,此时就可以使用fcn_type去定义一个新的函数指针:
int callback_fcn_1(int x)
{
int m;
m = x + 666;
return m
}
int callback_fcn_2(int x)
{
int m;
m = x - 666;
return m
}
int my_fcn(int x,int y,fcn_type callback)
{
int c,d;
c=x+y;
d=callback(c);
return d;
}
假设有两个函数,分别是把输入值+666或者-666然后再return
假设现在需要在my_function中对输入参数x,y求和后对求和结果做进一步操作操作
但是不同工程师后续的计算目的不同,编写my_fcn的工程师不确定其他工程师对这个求和结果要做什么操作,所以留出一个函数接口,供大家选择后需要做的操作
如果小明希望把求和结果+666,那就在调用my_function时把第三个参数也就是回调函数写为callback_fcn_1
如果小红希望把求和结果-666,那就在调用my_function时把第三个参数也就是回调函数写为callback_fcn_2
#include <stdio.h>
int main()
{
my_fcn(1,2,callback_fcn_1);//1+2后的求和结果再+666
my_fcn(1,2,callback_fcn_2);//1+2后的求和结果再-666
return 0;
}