【归纳总结】函数指针和回调函数
2015-05-23 01:53
239 查看
函数指针和回调函数
函数指针
在C语言中,函数也有地址,而函数名称就可以用来表示函数的地址,既然有地址,那就代表可以用一个指针变量来存储这个地址,函数指针就是用来记录函数的地址。例 一:
#include <stdio.h> void func(void) { printf("HelloWorld\n"); } int main() { printf("func== %p\n", func); //可以看出函数名称func是有自己的地址 void(*p_func)(void) = func; //声明一个函数指针,记录函数func的地址 func(); p_func(); printf("p_func== %p, func == %p\n", p_func, func); //函数func的地址和 //p_func存储的地址一样。 return0; }
在例一中,func()和p_func()在屏幕上打印出来的结果是一样,证明了一个函数指针与函数捆绑后,该函数指针就能当作一个函数使用。
函数指针需要先声明然后再使用,函数指针的声明可以根据函数声明变化得到,同时函数指针也分类型,不同格式的函数适合与不同类型的函数指针捆绑。
函数指针的声明
声明函数指针,可以把声明看成3个部分:例 二:
(函数的返回类型) (*函数名称) (参数列表); //函数名称前加*号,表示是指针。
void (*p_func)(void); //指向一个无返回值、无参数的函数。
int (*p_func)(void); //指向一个无参数、返回值为整型的函数。
char* (*p_func)(char**) //指向一个参数为char**类型、返回值为char*的函数。
所以声明函数指针的时候,必须清楚它所指向的函数的返回值和参数。
在C语言中,结构体单中不可以声明函数,但是我们可以在结构体单中声明一个函数指针,给此指针赋值,就可以实现在结构体声明函数的目的。
回调函数
函数指针可以作为形式参数使用,会作为实际参数使用的函数叫回调函数。我在网上搜过了资料,发现回调函数是十分重要的知识,但目前本人水平有限,还不是很清楚这玩意,等了解后,会重新开一个文章,把所知道的再详细的总结一次。现在先举个以函数指针作为参数的例子
例 三 :
#include <stdio.h> void big(int* num, int* num2) { inttmp = 0; if(*num > *num2) { tmp = *num; *num = *num2; *num2 = tmp; } } void little(int* num, int* num2) { big(num2,num); } void bubble(int* p_arr, int size, void(*p_func)(int*,int*)) { inti = 0; intj = 0; for(i = 0; i < size; i++) { for (j = 0; j < size - i - 1; j++) { p_func(p_arr+ j, p_arr + j + 1); } } } void print(int* p_arr, int size) { inti = 0; for(i = 0; i < size; i++) { printf("%d ", *(p_arr + i)); } printf("\n"); } void for_each(int* p_arr, int size, void(*p_func)(int*, int)) { p_func(p_arr,size); } int main() { intarr[7] = {5, 2, 9, 8, 1, 3, 7}; bubble(arr,7, little); for_each(arr,7, print); bubble(arr,7, big); for_each(arr,7, print); return0; }
这是我们熟悉的冒泡排序法,这里通过传入一个函数指针,来让bubble判断是升序排序,还是降序排序,同时bubble函数里面的数据会作为参数再传递到函数指针里面。(我都不知道想说什么了,因为在我这3个星期的学习中还没写过这样的程序,所以还是等接触了以后再深入了解后再总结把,今天就到此为止了。)
相关文章推荐
- 第九章 函数(指针简析 *与&运算符)总结 140515
- C函数指针应用之回调函数
- 总结1->sizeof-默认值参数的函数-static-指针和引用概念-const-CAS
- 关于函数指针的一点总结
- 函数何时值传递,何时指针,何时引用传递总结
- 指向函数的指针(pointers to functions)和回调函数
- 回调函数(函数指针的应用)
- c 函数指针的定义 和 C++回调函数的使用
- 指针作为函数的形参的总结
- 数组转置(函数指针,回调函数)
- C/C++ const几点总结(2)——指针与函数
- 回调函数和函数指针
- C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
- C:函数指针、回调函数
- 总结归纳:110个Oracle 常用函数的总结
- c--函数指针,函数指针数组,回调函数
- PHP面试题总结归纳(二)常会问到四道算法函数
- C++中回调函数及函数指针的实例详解
- C++中的函数指针的一些总结
- C语言笔记总结(函数与指针)