一.函数指针:

(1).描述:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的 物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在代码段中的,它们同样有地址,因此同样可以用指针来 存取函数,把这种指向函数入口地址的指针称为函数指针。

PS:函数指针不能进行++或--操作。


(2).声明方法:

返回值类型 (*指针变量名)([形参列表])

返回值类型:声明函数的返回值类型。

指针变量名:和普通指针声明一样,可以随意声明变量名。(PS:括号不能忽略了,如果忽略则变成一个普通的函数声明,返回的数据类型是指针的函数)

形参列表:指针变量所指向的函数的形参列表。(必须和所指向的函数的形参列表一样)


例如:

int func(int x);   //声明一个函数

int (*f)(int );    //声明一个函数指针

f = func;              //把func函数的首地址赋给函数指针f

或者  f = &func   //把func函数地址赋给函数指针f



不过上面的例子在某些编译器上是通不过的,可以用下面的例子:

int func(int x);   //声明一个函数

typedef int (*f)(int );    //声明一个函数指针类型

f func1 = func;              //把func函数的首地址赋给函数指针变量func1

func1(2);                   //调用函数func


PS:指针函数是指函数的返回值是一个指针的函数,其本质是一个函数。




二.回调函数:

描述:自己定义一个函数,函数的内容自己实现,然后把这个函数作为一个参数传给另一个(系统)的函数,由另一个 (系统)的函数运行时调用这个函数。


例如:

void print(char *s)

{

    printf("%s\n", s);

}


void P(void (*func)(char* s), char *s)

{

    (*func)(s);

}


int main()

{

    char* s = "Make world better";

    P(print, s);

}