通過函數指針調用函數


 1 #include "stdafx.h"
 2 #include <iostream>
 3 using namespace std;
 4 
 5 int Sum;
 6 
 7 void Function1(void);
 8 void Function2(void);
 9 
10 //函數指針數組
11 void (*Function[10])(void)=
12 {
13     Function1,
14     Function2,
15 };
16 
17 void Function1(void)
18 {
19     Sum=8;
20 }
21 
22 void Function2(void)
23 {
24     Sum=3;
25 }
26 
27 int main()
28 {
29     void (*p)();
30     Function[1]();
31     cout<<"Sum="<<Sum<<endl;
32     cout<<"-------------------"<<endl;
33     p=Function[0];
34     p();
35     cout<<"Sum="<<Sum<<endl;
36     cout<<"-------------------"<<endl;
37     p=Function[1];
38     (*p)();
39     cout<<"Sum="<<Sum<<endl;
40     cout<<"-------------------"<<endl;
41 
42     system("pause");
43     return 0;
44 }

執行結果為:

 

首先看函數指針數組,拆開來看,Function[]表明是數組,前面再加‘ * ’,表明數組中元素都是指針,即是一個指針數組;

而后面再加‘ ( ) ’,那么表示數組中的每一個指針指向都是函數;

兩個void表明,每一個函數形參都是void類型,返回值也是void類型。

程序中,函數指針數組總共包括10個成員,不過暫時只定義了兩個函數。

我們需要了解的是如何通過函數指針調用函數。

 

一個函數在編譯的時候會被分配一個入口地址,這個函數入口地址稱為函數的指針。可以用一個指針變量指向函數,然后通過指針變量調用此函數。

main函數中,定義了一個函數指針,注意:定義的函數指針的結構應該與擬調用的函數原型相同。

如void Function1(void),我們定義的函數指針為 void (*p)()

那么我們完全可以令p=Function1,考慮到是函數指針數組,那么p=Function[0],即將Function1的函數入口地址賦給了指針p

調用的時候可以寫作p()即可。

當然同樣也可以寫作(*p)(),具有相同效果。

 

如果不希望使用額外的指針,直接調用也是可以的:

如Function[0]();

或者Function[1]();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM