函數指針(回調函數)代碼例子

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個函數分別實現(xiàn)求最大值、最小值苦掘、平均值和未知算法换帜,然后實現(xiàn)了GetOperation函數。這個函數根據字符的返回值實現(xiàn)上面4個函數鹤啡。它是以函數指針的形式返回的惯驼,從后面的main函數的GetOperation(c)(dbData, iSize)可以看出,通過這個指針可以調用函數递瑰。

返回函數名相當于返回一個指針名祟牲。返回值的類型匹配。
函數名本身是一個指針類型抖部。函數指針

如果定義:
int* func()與int *p

有如下的關系:

func   《====》p
func() 《====》*p
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末说贝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子慎颗,更是在濱河造成了極大的恐慌乡恕,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俯萎,死亡現(xiàn)場離奇詭異傲宜,居然都是意外死亡,警方通過查閱死者的電腦和手機讯屈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門蛋哭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涮母,你說我怎么就攤上這事谆趾。” “怎么了叛本?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵沪蓬,是天一觀的道長。 經常有香客問我来候,道長跷叉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮云挟,結果婚禮上梆砸,老公的妹妹穿的比我還像新娘。我一直安慰自己园欣,他們只是感情好帖世,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沸枯,像睡著了一般日矫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绑榴,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天哪轿,我揣著相機與錄音,去河邊找鬼翔怎。 笑死窃诉,一個胖子當著我的面吹牛,可吹牛的內容都是我干的姓惑。 我是一名探鬼主播褐奴,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼按脚,長吁一口氣:“原來是場噩夢啊……” “哼于毙!你這毒婦竟也來了?” 一聲冷哼從身側響起辅搬,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤唯沮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后堪遂,有當地人在樹林里發(fā)現(xiàn)了一具尸體介蛉,經...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年溶褪,在試婚紗的時候發(fā)現(xiàn)自己被綠了币旧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡猿妈,死狀恐怖吹菱,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情彭则,我是刑警寧澤鳍刷,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站俯抖,受9級特大地震影響输瓜,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一尤揣、第九天 我趴在偏房一處隱蔽的房頂上張望搔啊。 院中可真熱鬧,春花似錦北戏、人聲如沸坯癣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽示罗。三九已至,卻和暖如春芝硬,著一層夾襖步出監(jiān)牢的瞬間蚜点,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工拌阴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绍绘,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓迟赃,卻偏偏與公主長得像陪拘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纤壁,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內容