C七:指向函式的指標 ------ 函式指標(function pointer)
阿新 • • 發佈:2019-01-30
函式具有可賦值給指標的實體記憶體地址,一個函式的函式名就是一個指標,它指向函式的程式碼。一個函式的地址是該函式的進入點,也是呼叫函式的地址。函式的呼叫可以通過函式名,也可以通過指向函式的指標來呼叫。函式指標還允許將函式作為變元傳遞給其他函式。
不帶括號和變數列表的函式名,這可以表示函式的地址,正如不帶下標的陣列名可以表示陣列的首地址。
定義形式:
型別 (*指標變數名)(引數列表);
例如:
int (*p)(int i,int j);
p是一個指標,它指向一個函式,該函式有2個整形引數,返回型別為int。p首先和*結合,表明p是一個指標。然後再與()結合,表明它指向的是一個函式。指向函式的指標也稱為函式指標。
int LocateElem(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)){ // 初始條件:順序線性表L已存在,compare()是資料元素判定函式(滿足為1,否則為0) // 操作結果:返回L中第1個與e滿足compare()的資料元素的位序 // 若這樣的資料元素不存在, 則返回值為0。演算法2.6 // compare為滿足一定條件的一類函式,稱為函式類形參 ElemType *p; int i = 1; // i的初值為第1個元素的位序 p = L.elem; // p的初值為第1個元素的儲存位置 while(i<=L.length && !compare(*p++,e)) i++; if(i<=L.length) return i; else return 0; }
int *f(int i, int j);
int (*p)(int i, int j);
前者是返回值是指標的函式;後者是一個指向函式的指標