首先了解一下基礎知識:
學習過c語言之後我們知道,函式是c語言的基本組成單位。函式其實也有他自己 的位址,函式的位址儲存在機器語言的記憶體的開始位址,使用cout來輸出它的位址。
如果乙個函式是dosomething(),那麼dosomething就是函式的位址。
函式指標的申明:
方法一:宣告與初始化分開
double c_perimeter(double radius);
double (*pf)(double );
pf = c_perimeter;
方法二:宣告的同時進行初始化
double c_perimeter(double radius);
double (*pf)(double ) = c_perimeter;
可以看出相較與原函式:
1、函式指標的返回值型別沒有發生改變;
2、形參的型別沒有發生改變,但是省略形參的值;
3、c_perimeter替換成了(*pf),這個括號不能省略,因為 () 的優先順序高於 * 的優先順序,將函式位址賦值給pf,這樣pf就是乙個函式指標了,有些類似於普通指標和普通變數之間的位址賦值關係。
注意:pf的特徵標(形參)和返回值必須和原函式相同。
函式指標的實現:
#include #include using namespace std;
const double pi = 3.14159;
double c_perimeter(double radius)
double c_area(double radius)
void calculate(double r, double(*pf)(double))
double* fun2(double a, int x)
void calculate(double *arr, int x, double* (*pf)(double*, int))
const double* f2(double arr)
const double* f3(double arr)
int main(void)
; const double* (*pf[3])(double*) = ;
cout << "address of f1 : " << f1 << endl;
cout << "address of f2 : " << f2 << endl;
cout << "address of f3 : " << f3 << endl << endl;
for (int i = 0; i < 3; i++)
cin.get();
return 0;
}
執行結果:
解讀以上的**,我們簡單的實現了函式指標陣列,首先我們輸出了函式本身的位址,大家可以**一下,為什麼最後面輸出值和位址有兩種形式,哈哈
C 之函式指標
總結 over 文末一句話 函式指標簡介 如果作為乙個屌絲程式設計師,未提到函式指標,則對c或c 函式的不尊重 函式與資料項相似,函式也有位址。函式的位址是儲存其機器語言 的記憶體的開始位址。通常,這些位址對使用者而言,既不重要,也沒有什麼用處,但是對程式而言,卻很有用。例如,可以編寫將另乙個函式的...
C 之函式指標
函式指標常用的有三類 1 指向普通函式的函式指標 2 指向類中靜態成員函式的函式指標 3 指向類的成員函式的函式指標 一 指向普通函式的函式指標 include using namespace std void show typedef void pfun 定義函式指標型別 intmain 二 指向...
C語言 指標之函式指標
一 函式指標的概念 二 函式指標的應用 1 呼叫函式 2 將函式的位址作為函式引數傳入其他函式。三 例項演示 函式指標的定義 若在程式中定義了乙個函式,編譯時,編譯器會為函式 分配一段儲存空間,這段空間的起始位址 又稱入口位址 稱為這個函式的指標。與普通變數相同,可以定義乙個指標指向存放函式 的儲存...