函式指標(function pointer)

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

Function Pointer 顧名思義,就是指向Function 的指標。

在C 語言中,不論是variable、array、struct、或是function(一段程式碼),都有所屬的起始記憶體位置。

parallel_processing Introduction 程序/行程(Process) 平行處理系統類別 MPI(Messagepassinginterface) MPICH安裝與設定 點對點通訊 集合通訊 Communicator One-sidedcommunication TORQUE OpenMP OpenMP設定 pthread ApacheSpark Spark安裝與設定 RDD介紹 基本程式設計 HDFS MapReduce介紹 CUDA 安裝(installation) 第一個程式 PyCUDA Theano Tensorflow XORproblem Cython 編譯 平行處理 PEP numpy Pandas C語言語法 Clibrary Pointer Doublepointer Functionpointer Struct Memoryleak C++參考 C++物件 C++樣版 x86函式調用協定 編譯器參數 cmake Pythonclass設計 nosetest py.test BLASlibrary Linpackbenchmark PoweredbyGitBook Functionpointer 函式指標(functionpointer) FunctionPointer顧名思義,就是指向Function的指標。

在C語言中,不論是variable、array、struct、或是function(一段程式碼),都有所屬的起始記憶體位置。

變數的指標指向變數的位址,同樣的,functionpointer(函式指標)也是指向函式的位址的指標。

而每個function的啟始記憶體位置,即為function的名稱。

而functionpointer的宣告跟使用function時所要注意的地方是相同的,有以下幾點必須注意: 回傳值型態(returntype) 參數數量(augumentcount) 參數型態(argumenttype) FunctionPointer:指向函數的指標。

int(*pfunc)(int); Functionreturnapointer:回傳指標的函數。

int*func(int); Functionpointerreturnapointer。

int(pfunc)(int); //函式宣告如下 voidfunc1(intint1,charchar1); /*指向func1的指標如下: *這樣的寫法應理解成:funcPtr1是一個函數指標,它指向的函數接受int與char兩個參數並回傳void。

(signature) */ void(*funcPtr1)(int,char); /*如果今天有另一個函式有相同的參考簽名 *則funcPtr1也能指向func2。

*/ voidfunc2(intint2,charchar2); //函式指標指向函式1 funcPtr1=&func1; //函式指標指向函式2 funcPtr1=&func2; //在宣告時就直接給予初值,則如下: void(*funcPtr1)(int,char)=&func1;//&亦可省略 functionpointer做為函式的參數 intdo_math(floatarg1,intarg2){ returnarg2; } //不使用typedef的原始宣告方法 intcall_a_func(int(*call_this)(float,int)){ intoutput=call_this(5.5,7); returnoutput; } //使用typedef的宣告方法 typedefint(*MathFunc)(float,int); intcall_a_func2(MathFunccall_this){ intoutput=call_this(5.5,7); returnoutput; } intfinal_result=call_a_func(do_math); functionpointerarray用法 根據state變數的狀態去呼叫對應的函式。

state:0,執行run() state:1,執行stop() state:2,執行exit() voidrun(){printf("start\r\n");} voidstop(){printf("stop\r\n");} voidexit(){printf("exit\r\n");} staticvoid(*command[])(void)={run,stop,exit}; intOnStateChange(uintstate){ if(state>3){ printf("Wrongstate!\n"); returnfalse; } command[state](); return0; } resultsmatching"" Noresultsmatching""



請為這篇文章評分?