通过函数指针调用函数
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]();