C/C++函数指针总结之一:C函数指针
来源:互联网 发布:python os.environ 编辑:程序博客网 时间:2024/04/29 21:01
一.函数指针的定义,赋值,(函数)调用
看一行C代码:
int *func1(int, int);
该代码含义很清楚:定义了一个func1函数,有两个整型形参,返回值为int *,即int型指针。
再看行C代码:
int (*func2)(int, int);
和前面一行相比,多了一对括号。就是这对括号,改变了操作符的结合顺序,从而完全改变了代码的含义。这个代码实际上是定义了一个指向某一类函数的指针(注意是一个实实在在的指针变量),即函数指针。它可以指向诸如:
int func3(int, int);
这样的函数。
在实际使用中,一般都用typedef来定义函数指针的类型。如:
typedef int (*FuncPtr)(int, int);
定义了一个函数指针的类型。既然是类型,就可以用它来定义变量:
FuncPtr func4;
这样,func4和func2是两个属于同样类型的指针变量。这种typedef的方式可以使函数指针的定义看起来更简单,也更直观。
现在让func4和func2都可以指向func3:
func2 = func4 = &func3;
上面的&为取地址操作符,可有可无。据说有&的形式符合标准,在不同的编译器之间具有更好的移植性。
因为func2和func4是函数的指针,那么解引用操做应该得到对应的函数,因此解引用之后就可以和func3一样来用:
int x = (*func2)(1 , 2);int y = (*func4)(1, 1);
大部分编译器也支持另一种语法:
int x = func2(1 , 2);int y = func4(1, 1);
但是麻烦一点的通用性更好。
二.函数指针的大小(sizeof)
在C里面,函数指针的大小和其他指针是一样的,即一般32位情况下为4字节,64位为8字节。
三.函数指针的比较
和普通指针类似,函数指针也可以做比较。不过比大小可能没有太大的意义,比较相等或不等有一些用途(比如和0比以检查是否为空指针)。
下面是完整的例子:
#include <iostream>#include <iomanip>using namespace std;bool func3(int a, int b){ return a<b;}int main(){ bool (*func2)(int, int) = &func3; //or = func3 bool x = (*func2)(1, 2); cout << "x=" << std::boolalpha << x << endl; typedef bool (*FuncPtr)(int, int); FuncPtr func4 = NULL; func4 = &func3; //or func4 = func3; bool y = (*func4)(2,1); cout << "y=" << std::boolalpha << y << endl; cout << "sizeof func2=" << sizeof func2 << endl; cout << "sizeof func3=" << sizeof &func3 << endl; cout << "sizeof func4=" << sizeof func4 << endl; cout << "sizeof FuncPtr=" << sizeof(FuncPtr) << endl; if(func2 != func4){ cout<<"func2 != func4" <<endl; } else{ cout<<"func2 == func4" <<endl; } cin.get(); return 0;}
讲了这些,那么函数指针都用在哪儿呢?最多的用途就是作为回调函数使用。C里面很出名的,也是我仅用过函数指针的地方,就是qsort,bsearch和pthread_create里面的线程函数。关于函数指针作为函数参数的下篇再总结。睡觉。
参考资料:
C++ Primer第4版
C和C++代码精粹
!!!!!!!欢迎转载,请注明本文链接:http://blog.csdn.net/mosaic/article/details/7199777 !!!!!!
- C/C++函数指针总结之一:C函数指针
- C++,C函数指针
- C/C++:函数指针
- C/C++ 函数指针 总结
- C/C++函数指针总结
- C指针函数 && 函数指针
- C++----函数&函数指针
- 【c/c++】指针函数和函数指针
- 【C和指针】函数指针
- 《c和指针》函数指针
- c++/c 函数指针用法
- C/C++_lesson_11_指针函数
- C/C++:C++函数指针
- C/C++__函数指针
- c++/c 函数指针详解
- C/C++·函数指针
- c语言函数指针
- C/C++函数指针
- [作业]骑士
- 献给业余数学之王:澄清对费马原理的误解
- 磁盘的基本知识
- 招商银行个人银行专业版最新版本 v6.0.4.9
- 复活节闲扯:一场激动人心的数学公开挑战赛
- C/C++函数指针总结之一:C函数指针
- SQL知识整理(2)
- Eclipse的升级
- 【Linux】Ubuntu下的 Wine安装
- 考试重点--计算机系统基础知识(1)
- 设计模式入门学习 单例模式
- 大二寒假计划
- fileUpload的用法
- ListView增加Animation效果