一、函數(shù)指針
1、函數(shù)指針變量的聲明及使用
就像某一數(shù)據(jù)變量的內(nèi)存地址可以存儲(chǔ)在相對(duì)應(yīng)的指針變量中一樣,函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址,函數(shù)的首地址(入口地址)也可以存儲(chǔ)在某個(gè)函數(shù)指針變量里,這樣我們就可以通過這個(gè)函數(shù)指針變量來調(diào)用所指向的函數(shù)。
我們把這種指向函數(shù)的指針變量叫做函數(shù)指針變量。
函數(shù)指針定義一般形式:
類型說明符 (*指針變量名)();
其中“類型說明符”表示被指函數(shù)的返回值的類型。“(* 指針變量名)”表示“*”后面的變量是定義的指針變量。最后的空括號(hào)表示參數(shù)列表。例如:
在C語言中,任何一個(gè)變量首先得聲明后才能使用,來聲明一個(gè)可以指向myFun的函數(shù)指針變量pFun
函數(shù)指針與指針函數(shù)
聲明函數(shù)指針變量pFun并調(diào)用myFun函數(shù)的方法2:
void (*pFun) (int); //也可以如下聲明
void (*pFun)(int x);
pFun = myFun; //函數(shù)的首地址賦給函數(shù)指針變量pFun
pFun(20); //通過函數(shù)指針變量pFun調(diào)用函數(shù)myFun
這樣就有了一個(gè)能指向myFun函數(shù)的指針pFun了(這個(gè)pFun指針變量也可以指向所有其它具有相同參數(shù)及返回值的函數(shù))。
2、函數(shù)指針作為某個(gè)函數(shù)的參數(shù)
void demoFun(void (*pFun)(int),int k){
pFun(k);
}
例:
函數(shù)指針與指針函數(shù)
從上述程序可以看出,函數(shù)指針變量形式調(diào)用函數(shù)的步驟如下:
先定義函數(shù)指針變量,定義 pFun為函數(shù)指針變量。
把被調(diào)函數(shù)的入口地址(函數(shù)名)賦予該函數(shù)指針變量,如程序中第15行 pFun = myFun;
用函數(shù)指針變量形式調(diào)用函數(shù),如程序第16行demoFun(myFun,b);
調(diào)用函數(shù)的一般形式為:(*指針變量名) (實(shí)參表)
二、指針函數(shù)
在C語言中允許一個(gè)函數(shù)的返回值是一個(gè)指針(即地址),這種返回指針值的函數(shù)稱為指針型函數(shù)。定義指針型函數(shù)的一般形式為:
數(shù)據(jù)類型 *函數(shù)名(形參列表){
//函數(shù)體
}
函數(shù)名之前加了*號(hào)表明這是一個(gè)指針型函數(shù),它的返回值是一個(gè)指針。