1. 程式人生 > >C七:指向函式的指標 ------ 函式指標(function pointer)

C七:指向函式的指標 ------ 函式指標(function pointer)

   函式具有可賦值給指標的實體記憶體地址,一個函式的函式名就是一個指標,它指向函式的程式碼。一個函式的地址是該函式的進入點,也是呼叫函式的地址。函式的呼叫可以通過函式名,也可以通過指向函式的指標來呼叫。函式指標還允許將函式作為變元傳遞給其他函式。

      不帶括號和變數列表的函式名,這可以表示函式的地址,正如不帶下標的陣列名可以表示陣列的首地址

定義形式:

        型別 (*指標變數名)(引數列表);

例如:

        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);

    前者是返回值是指標的函式;後者是一個指向函式的指標