1.一個函數的指標,必須確保該函數被定義且分配了記憶體,否則將指向空地址,這是指標的大忌。
2.函數指標的使用條件:參數、傳回值都吻合‘
3.函數指標沒有++或--的運算
4.函數指標作為參數的最好的例子就是回呼函數
5.函數指標的使用
例:
void (*p)(int &, int &);void cube(int &x, int &y){x = x * x * x;y = y * y * y;}void Test(void (*p)(int &, int &), int &a, int &b){p(a, b);cout<<a<<' '<<b<<endl;}int main(){int x = 2, y = 3;p = cube;p(x, y);//在主函數中使用函數指標cout<<x<<' '<<y<<endl;Test(p, x, y);//函數指標作為函數return 0;}
輸出:
8 27
512 19683
用typedef可以簡化函數指標的使用。
例:
typedef void (*p)(int &, int &);void cube(int &x, int &y){x = x * x * x;y = y * y * y;}void Test(p vp, int &a, int &b){vp(a, b);cout<<a<<' '<<b<<endl;}int main(){int x = 2, y = 3;p vp = cube;vp(x, y);//在主函數中使用函數指標cout<<x<<' '<<y<<endl;Test(vp, x, y);//函數指標作為函數return 0;}
輸出:
8 27
512 19683
6.對於成員函數指標,注意以下幾點
1)要在特定類的對象中調用成員函數指標
2)盡量利用typedef簡化成員函數指標
3)盡量不用成員函數指標
7.數組名是數組第一個元素的指標。同理,函數名也是指向函數第一條指令的常量指標
程式編譯後,每個函數都有個首地址,也就是函數第一條指令的地址。
如果用一個指標來儲存這個地址,那麼這個指標就是函數指標,該指標可以看作是函數名。
因此我們可以通過函數指標調用函數
8.
int* func(int);
聲明了一個帶有整型參數的函數func,並返回一個整型的指標
聲明了一個函數,返回一個指標
int (*func)(int);
聲明一個int型的指標func,它指向一個函數,這個函數帶有一個int型的參數,並返回int型的值。
聲明一個指標,返回一個函數
9.使用函數指標,便於使用者選擇調用不同名字但是又類型和參數相同的函數
10.函數指標數組
void (*p[5])(int, int);
聲明了一個有5個元素的數組指標,每個指標指向的是帶有兩個int參數且返回void的函數