【C語言觀念複習筆記】函數指標陣列(Array of function pointer)
文章推薦指數: 80 %
之前寫過一篇文章討論過指標陣列的觀念這個指標陣列的指標當然也是有型態的, 上述文章是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個中文字元)
請輸入左方認證碼:
看不懂,換張圖
請輸入驗證碼
送出留言
延伸文章資訊
- 1陣列指標與函數
- 2將陣列(含多維)傳入副函式- CYCU-EE-C
printf(“%d”, A[0] ); 這樣輸出的答案是2,這樣大概了解陣列等於指標的事情了吧! 所以到底該怎麼傳入副程式 ...
- 3指標
『指標』是⼀一種資料型態,⽤用來儲存『記憶體位址』. ⼀一般情況下,我們是不需要『指標』這種東⻄西的。 ... 例如呼叫函式時要將陣列作為函式引數複製到函式內.
- 4指標函式與函式指標陣列— Function Pointers, Array of ...
前面我們知道指標可以指向任何的記憶體位址,這也代表指標可以指向任何一段可執行的程式碼,這也稱作為指標函式。 指標函式的宣告:(*代表指標的意思).
- 5陣列、函式與指標 - 程式人生
參考. The C Programming Language-Chapter 5 Pointers and Arrays. 前言. 在上一篇文章動態陣列(一維二維)探祕介紹了陣列的一些知識,在最...