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]();