1.指针函数
int *f(x,y);
它的本质是一个函数,不过它的返回值是一个指针。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
float *fun();
float *p;
p = fun(a);
当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数
2.函数指针
函数指针是指向函数的指针变量,即本质是一个指针变量。
区分就是看指针是否在括号内
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
指向函数的指针包含了函数的地址,可以通过它来调用函数。
函数的定义是存在于代码段,因此,每个函数在代码段中,也有着自己的入口地址,
函数指针就是指向代码段中函数入口地址的指针。
为什么使用函数指针
举个例子,如果我们要实现数组的排序,我们知道,常用的数组排序方法有很多种,比
如快排,插入排序,冒泡排序,选择排序等,如果不管内部实现,你会发现,除了函数
名不一样之外,返回值,包括函数入参都是相同的,这时候如果要调用不同的排序方
法,就可以使用指针函数来实现,我们只需要修改函数指针初始化的地方,而不需要去
修改每个调用的地方(特别是当调用特别频繁的时候)。