【C語言觀念複習筆記】函數指標陣列(Array of function pointer)

文章推薦指數: 80 %
投票人數:10人

之前寫過一篇文章討論過指標陣列的觀念這個指標陣列的指標當然也是有型態的, 上述文章是char 而也可以是指向function 因為指標陣列在上面文章討論過了 ... 阿良的嵌入式系統技術學習區 跳到主文 分享嵌入式系統技術文章,開設嵌入式系統相關教學課程,可洽談:[email protected] 簡歷:https://sites.google.com/view/wenliangsun/ 部落格全站分類:數位生活 相簿 部落格 留言 名片 Nov07Thu201910:13 【C語言觀念複習筆記】函數指標陣列(Arrayoffunctionpointer) 之前寫過一篇文章討論過指標陣列的觀念 這個指標陣列的指標當然也是有型態的,上述文章是char 而也可以是指向function 因為指標陣列在上面文章討論過了,所以先簡單補充一下函數指標的最基礎觀念透過下列簡單範例說明: 簡單的範例如下: #include"stdio.h" void(*foo)(); voidshow(void) { puts("OMG\n"); } intmain() { inta; foo=show; foo(); return0; } 執行結果會看到OMG字串顯示 而函數指標陣列就是結合上面(指標陣列&函數指標的觀念) 在網路上也有看到別人分享的還不錯的說明: https://swaywang.blogspot.com/2013/01/c-array-of-function-pointer.html?fbclid=IwAR38zGLPnrK-15T7BAA9QWiOAF2Mh3DGbrUKrjvmbGZJuG_StnLLB6SaNac   這邊舉個範例,簡單來說是要將下面這段Ccode的if-else條件改成以函式指標陣列(arrayoffunctionpointer)的方式改寫 #include"stdio.h" #include"stdlib.h" intplus(inta,intb){returna+b;} intminus(inta,intb){returna-b;} intmultiply(inta,intb){returna*b;} intdivided(inta,intb){returna/b;} intmain() { inta,c; charb; printf("keyaFunction\nEX:1+1\n"); scanf("%i%c%i",&a,&b,&c); if(b=='+') printf("%d%c%d=%d\n",a,b,c,plus(a,c)); elseif(b=='-') printf("%d%c%d=%d\n",a,b,c,minus(a,c)); elseif(b=='*') printf("%d%c%d=%d\n",a,b,c,multiply(a,c)); elseif(b=='/') printf("%d%c%d=%d\n",a,b,c,divided(a,c)); } 原程式碼的寫法的問題在於如果條件越多時,那if-else條件式勢必隨條件加長,易使得程式變得攏長,可透過函式指標陣列的方式改善此問題。

改寫如下 #include"stdio.h" intplus(inta,intb){returna+b;} intminus(inta,intb){returna-b;} intmultiply(inta,intb){returna*b;} intdivided(inta,intb){returna/b;} intmain(){ inta,c; charb; scanf("%d%c%d",&a,&b,&c); int(*cmd[])(inta,intc)={multiply,plus,NULL,minus,NULL,divided}; printf("%d\n",cmd[b-42](a,c));//'*'ASCII=42(0x2a),'+'ASCII=43(0x2b),'-'ASCII=45,'/'ASCII=47 return0; } 按照上述寫法加以測試,例如輸入6*5就會看到印出的結果30,執行結果畫面如下:   【若需要嵌入式系統技術輔導課程可來信洽談合作方式:[email protected],亦可先點擊參考這篇介紹文章】                               文章標籤 產業 教育 大學教育 軟體 程式語言 C語言 全站熱搜 創作者介紹 阿良 阿良的嵌入式系統技術學習區 阿良發表在痞客邦留言(0)人氣() E-mail轉寄 全站分類:進修深造個人分類:C語言程式此分類上一篇:【C語言觀念複習筆記】指標陣列(Arrayofpointer)相關觀念之範例解析說明 上一篇:許多人對於8051MCU常有的錯誤觀念討論與闢除 下一篇:強大的Arduino嵌入式平台與硬體電路模擬軟體:AutodeskTinkercad(123Dcircuit) 歷史上的今天 2019:【使用STM32CubeIDE進行STM32MCU軟韌體開發】STM32CubeIDE之簡介與安裝流程 2019:【網路好文介紹】在嵌入式Linux系統下有無依賴現成Library之差異:以簡易的GPIO應用為例 2019:安裝VisualStudio2017 2019:強大的Arduino嵌入式平台與硬體電路模擬軟體:AutodeskTinkercad(123Dcircuit) ▲top 留言列表 發表留言 站方公告 [公告]2022年度農曆春節期間服務公告[公告]MIB廣告分潤計劃、PIXwallet錢包帳戶條款異動通知[公告]2021年度農曆春節期間服務公告 活動快報 達特蕾蒂易肽纖 小心!糖糖危機來襲!Dr.Lady的享甜0負擔魔法【易肽... 看更多活動好康 我的好友 熱門文章 文章分類 教育(4)技術教育(7)技職(教育)體系(3)產學落差(3)勞工議題(2)應用程式(1)社會議題(0)藍牙(1)嵌入式系統(36)穿戴式裝置(1)EmbeddedLinux(7)Arduino(3)C語言程式(2)教育(0)關於作者(0)未分類文章(12) 最新文章 最新留言 動態訂閱 文章精選 文章精選 2022六月(1) 2022三月(1) 2022二月(2) 2022一月(3) 2021十二月(2) 2021十一月(5) 2021十月(4) 2021九月(2) 2021八月(6) 2021七月(10) 2021五月(2) 2021四月(1) 2021三月(3) 2021二月(1) 2021一月(2) 2020十二月(3) 2020十一月(1) 2020十月(2) 2020九月(2) 2020八月(4) 2020六月(1) 2020五月(1) 2020三月(2) 2020二月(3) 2019十一月(6) 2019二月(2) 2019一月(10) 所有文章列表 文章搜尋 新聞交換(RSS) 誰來我家 參觀人氣 本日人氣: 累積人氣: QRCode POWEREDBY (登入) {{article.user_name}} {{article.timestamp*1000|date:'MMM.dd.y.hh.mm'}} {{article.title}} {{article.content}} 我要留言 回到頁首 回到主文 免費註冊 客服中心 痞客邦首頁 ©2003-2022PIXNET 關閉視窗 PIXNET Facebook Yahoo! Google MSN {{guestName}} (登出) 您尚未登入,將以訪客身份留言。

亦可以上方服務帳號登入留言 請輸入暱稱(最多顯示6個中文字元) 請輸入標題(最多顯示9個中文字元) 請輸入內容(最多140個中文字元) 請輸入左方認證碼: 看不懂,換張圖 請輸入驗證碼 送出留言



請為這篇文章評分?