C七:指向函数的指针 ------ 函数指针(function pointer)
?? 函數(shù)具有可賦值給指針的物理內(nèi)存地址,一個(gè)函數(shù)的函數(shù)名就是一個(gè)指針,它指向函數(shù)的代碼。一個(gè)函數(shù)的地址是該函數(shù)的進(jìn)入點(diǎn),也是調(diào)用函數(shù)的地址。函數(shù)的調(diào)用可以通過(guò)函數(shù)名,也可以通過(guò)指向函數(shù)的指針來(lái)調(diào)用。函數(shù)指針還允許將函數(shù)作為變?cè)獋鬟f給其他函數(shù)。
? ? ? 不帶括號(hào)和變量列表的函數(shù)名,這可以表示函數(shù)的地址,正如不帶下標(biāo)的數(shù)組名可以表示數(shù)組的首地址。
定義形式:
? ? ? ? 類型 (*指針變量名)(參數(shù)列表);
例如:
? ? ? ? int (*p)(int i,int j);
? ? p是一個(gè)指針,它指向一個(gè)函數(shù),該函數(shù)有2個(gè)整形參數(shù),返回類型為int。p首先和*結(jié)合,表明p是一個(gè)指針。然后再與()結(jié)合,表明它指向的是一個(gè)函數(shù)。指向函數(shù)的指針也稱為函數(shù)指針。
int LocateElem(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)){// 初始條件:順序線性表L已存在,compare()是數(shù)據(jù)元素判定函數(shù)(滿足為1,否則為0) // 操作結(jié)果:返回L中第1個(gè)與e滿足compare()的數(shù)據(jù)元素的位序// 若這樣的數(shù)據(jù)元素不存在, 則返回值為0。算法2.6// compare為滿足一定條件的一類函數(shù),稱為函數(shù)類形參 ElemType *p;int i = 1; // i的初值為第1個(gè)元素的位序p = L.elem; // p的初值為第1個(gè)元素的存儲(chǔ)位置while(i<=L.length && !compare(*p++,e))i++;if(i<=L.length)return i;elsereturn 0; }?int *f(int i, int j);
? ? ? ? int (*p)(int i, int j);
? ? 前者是返回值是指針的函數(shù);后者是一個(gè)指向函數(shù)的指針
總結(jié)
以上是生活随笔為你收集整理的C七:指向函数的指针 ------ 函数指针(function pointer)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C六:指针可以比较大小
- 下一篇: C八:*与++