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
<code>#include<iostream></code>
<code>#include<cstring></code>
<code>using</code>
<code>namespace</code> <code>std;</code>
<code>bool</code>
<code>lengthCompare(</code><code>const</code>
<code>string &a,</code><code>const</code>
<code>string &b)</code>
<code>{</code>
<code> </code><code>cout<<</code><code>"1"</code><code><<endl;</code>
<code> </code><code>return</code>
<code>a.size()>b.size();</code>
<code>}</code>
<code>/***************************分割線************************************/</code>
<code>void</code>
<code>useBigger(</code><code>const</code>
<code>string &b,</code><code>bool</code>
<code>(*pf)(</code><code>const</code>
<code>string &c,</code><code>const</code>
<code>string &d))</code>
<code> </code><code>cout<<</code><code>"11"</code><code>;</code>
<code> </code><code>pf(a,b);</code>
<code>int</code>
<code>main()</code>
<code> </code><code>string a=</code><code>"Yanxueke is a pig"</code><code>;</code>
<code> </code><code>string b=</code><code>"Zhanghan"</code><code>;</code>
<code> </code><code>//pf=lengthCompare; == pf=&lengthCompare; //pf指向lengthCompare的函數 and &位址符是可選的</code>
<code> </code><code>bool</code>
<code>string &b);</code>
<code> </code><code>pf=lengthCompare;</code>
<code> </code>
<code> </code><code>useBigger(a,b,pf);</code>
<code>0;</code>
做了一個題目說用vector儲存函數指針,順便也貼上來吧。
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<code>#include<vector></code>
<code>/*函數名指向該函數的代碼在記憶體中的首位址*/</code>
<code>/*typeded的功能是定義一個新的類型*/</code>
<code>typedef</code>
<code>bool</code> <code>(*pf)(</code><code>const</code>
<code>string &b);</code><code>//聲明一個函數指針,必須要定義别名才能放在vector容器中使用</code>
<code>fun_1(</code><code>const</code>
<code> </code><code>cout<<</code><code>"you are my love"</code><code>;</code>
<code>false</code><code>;</code>
<code>fun_2(</code><code>const</code>
<code> </code><code>cout<<</code><code>"you are my best love"</code><code>;</code>
<code>true</code><code>;</code>
<code> </code><code>string a=</code><code>"Yanxueke"</code><code>;</code>
<code> </code><code>//pf=lengthCompare;</code>
<code> </code><code>vector<pf> v_pf;</code>
<code> </code><code>v_pf.push_back(fun_1);</code>
<code> </code><code>v_pf[0](</code><code>"Hello"</code><code>,</code><code>"Hi"</code><code>);</code>
<code> </code><code>//useBigger(a,b,pf);</code>
這次發帖有點倉促,還沒來得及準備,下次按一個章節系統整理好之後再發。。