PS:刚开始我还不知道函数指针有什么用,因为一个函数当中,弄个指针岂不是很麻烦,调用的时候直接找到函数就行了,在弄个指针指向它岂不是多此一举,但是,这可能是一种封装的机制,把函数封装好,看不到局部函数,可能是一种保护机制吧。。或者在主函数内部直接定义指针,更一目了然。比如qsort啥的,排序的算法已经写好了,但在比较的时候,需要知道哪个大哪个小,这个规则可以由外面的程序来定。小弟初学C++,还有很多不懂的地方,望指教。。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 |
#include<iostream> #include<cstring> using
namespace std; bool
lengthCompare( const
string &a, const
string &b) { cout<< "1" <<endl; return
a.size()>b.size(); } /***************************分割线************************************/ void
useBigger( const
string &a, const
string &b, bool
(*pf)( const
string &c, const
string &d)) { cout<< "11" ; pf(a,b); } int
main() { string a= "Yanxueke is a pig" ; string b= "Zhanghan" ; //pf=lengthCompare; == pf=&lengthCompare; //pf指向lengthCompare的函数 and &地址符是可选的 bool
(*pf)( const
string &a, const
string &b); pf=lengthCompare; useBigger(a,b,pf); return
0; } |
做了一个题目说用vector保存函数指针,顺便也贴上来吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 |
#include<iostream> #include<cstring> #include<vector> using
namespace std; /*函数名指向该函数的代码在内存中的首地址*/ bool
lengthCompare( const
string &a, const
string &b) { cout<< "1" <<endl; return
a.size()>b.size(); } /***************************分割线************************************/ void
useBigger( const
string &a, const
string &b, bool
(*pf)( const
string &c, const
string &d)) { cout<< "11" ; pf(a,b); } /*typeded的功能是定义一个新的类型*/ typedef
bool (*pf)( const
string &a, const
string &b); //声明一个函数指针,必须要定义别名才能放在vector容器中使用 bool
fun_1( const
string &a, const
string &b) { cout<< "you are my love" ; return
false ; } bool
fun_2( const
string &a, const
string &b) { cout<< "you are my best love" ; return
true ; } int
main() { string a= "Yanxueke" ; string b= "Zhanghan" ; //pf=lengthCompare; == pf=&lengthCompare; //pf指向lengthCompare的函数 and &地址符是可选的 //pf=lengthCompare; vector<pf> v_pf; v_pf.push_back(fun_1); v_pf[0]( "Hello" , "Hi" ); //useBigger(a,b,pf); return
0; } |
这次发帖有点仓促,还没来得及准备,下次按一个章节系统整理好之后再发。。
原文地址:http://www.cnblogs.com/paulzhangh/p/3750681.html