一.函数指针:
(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);
}
本文出自 “水仙花” 博客,请务必保留此出处http://10704527.blog.51cto.com/10694527/1769841
原文:http://10704527.blog.51cto.com/10694527/1769841