天天看點

函數指針

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&lt;iostream&gt;</code>

<code>#include&lt;cstring&gt;</code>

<code>using</code>

<code>namespace</code> <code>std;</code>

<code>bool</code>

<code>lengthCompare(</code><code>const</code>

<code>string &amp;a,</code><code>const</code>

<code>string &amp;b)</code>

<code>{</code>

<code>    </code><code>cout&lt;&lt;</code><code>"1"</code><code>&lt;&lt;endl;</code>

<code>    </code><code>return</code>

<code>a.size()&gt;b.size();</code>

<code>}</code>

<code>/***************************分割線************************************/</code>

<code>void</code>

<code>useBigger(</code><code>const</code>

<code>string &amp;b,</code><code>bool</code>

<code>(*pf)(</code><code>const</code>

<code>string &amp;c,</code><code>const</code>

<code>string &amp;d))</code>

<code>    </code><code>cout&lt;&lt;</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=&amp;lengthCompare; //pf指向lengthCompare的函數 and &amp;位址符是可選的</code>

<code>    </code><code>bool</code>

<code>string &amp;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&lt;vector&gt;</code>

<code>/*函數名指向該函數的代碼在記憶體中的首位址*/</code>

<code>/*typeded的功能是定義一個新的類型*/</code>

<code>typedef</code>

<code>bool</code> <code>(*pf)(</code><code>const</code>

<code>string &amp;b);</code><code>//聲明一個函數指針,必須要定義别名才能放在vector容器中使用</code>

<code>fun_1(</code><code>const</code>

<code>    </code><code>cout&lt;&lt;</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&lt;&lt;</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&lt;pf&gt; 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>

這次發帖有點倉促,還沒來得及準備,下次按一個章節系統整理好之後再發。。