1、函數指針: 指向函數的指針就叫函數指針,由于函數名以存儲名就是函數的首位址,即函數指針時指向函數名的指針
2、格式: 指針類型修飾符 * 指針變量名 = 初始值;
3、函數指針确定的步驟:
//第一步:将函數名去掉,用小括号星(*)替代
// void (*)(); int (*)(int a,int b);
//第二步:若有參數,将參數名去掉,隻保留參數類型;
// void (*)(); int (*)(int ,int );
4、 //定義函數指針變量需要注意的内容:1:确定函數指針的類型,2.指針變量名不能與函數重名,3.有參數的指針變量隻寫參數類型
————————————————————————————
注意:
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 test(p vp, int &a, int &b)
vp(a, b);
p vp = cube;
vp(x, y);//在主函數中使用函數指針
test(vp, x, y);//函數指針作為函數
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的函數
轉自:http://blog.csdn.net/qq_31810357