通过函数指针调用函数

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

posted @ 2016-05-23 10:39  kelemay1016  阅读(9282)  评论(0编辑  收藏  举报