1 #include<stdio.h>
2 #include <assert.h>
3 double GetMin(double *dbData, int iSize) // 求最小值
4 {
5 double dbMin;
6 int i;
7
8 assert(iSize>0);
9 dbMin=dbData[0];
10 for (i=1; i<iSize; i++){
11 if (dbMin>dbData[i]) {
12 dbMin=dbData[i];
13 }
14 }
15 return dbMin;
16 }
17
18 double GetMax(double *dbData, int iSize) // 求最大值
19 {
20 double dbMax;
21 int i;
22
23 assert(iSize>0);
24 dbMax=dbData[0];
25 for (i=1; i<iSize; i++){
26 if (dbMax< dbData[i]) {
27 dbMax=dbData[i];
28 }
29 }
30 return dbMax;
31 }
32
33 double GetAverage(double *dbData, int iSize) // 求平均值
34 {
35 double dbSum=0;
36 int i;
37
38 assert(iSize>0);
39 for (i=0; i<iSize; i++)
40 {
41 dbSum+=dbData[i];
42 }
43 return dbSum/iSize;
44 }
45
46 double UnKnown(double *dbData, int iSize) // 未知算法
47 {
48 return 0;
49 }
50
51 typedef double (*PF)(double *dbData, int iSize); // 定义函数指针类型
52 PF GetOperation(char c) // 根据字符得到操作类型,返回函数指针
53 {
54 switch (c)
55 {
56 case 'd':
57 return GetMax;//返回函数名相当于返回一个指针名
58 case 'x':
59 return GetMin;
60 case 'p':
61 return GetAverage;
62 default:
63 return UnKnown;
64 }
65 }
66
67 int main(void)
68 {
69 double dbData[]={3.1415926, 1.4142, -0.5,999, -313, 365};
70 int iSize=sizeof(dbData)/sizeof(dbData[0]);
71 char c;
72
73 printf("Please input the Operation :\n");
74 c=getchar();
75 printf("result is %lf\n", GetOperation(c)(dbData,iSize)); // 通过函数指针调用函数
76 }
上述程序中前面4个函数分别实现求最大值、最小值、平均值和未知算法,然后实现了GetOperation函数。这个函数根据字符的返回值实现上面4个函数。它是以函数指针的形式返回的,从后面的main函数的GetOperation(c)(dbData, iSize)可以看出,通过这个指针可以调用函数。
返回函数名相当于返回一个指针名。返回值的类型匹配。
函数名本身是一个指针类型。函数指针
如果定义:
int* func()与int *p
有如下的关系:
func 《====》p
func() 《====》*p
网友评论