正常情況下,指針指向的是整型,字符,數組等;而函數指針也一樣,是指向函數的指針變量。
因此函數指針本質上還是指針,只不過指向的對象從我們常見的數組等變成了函數
表示方法
- int add(int x); //定義
- typedef int (*Node)(int); //指針 //類型名:Node
- Node m=add; //賦值
- 運用指針函數時,需要保證指針的格式和函數的格式一樣,才能調用
- (比如:函數是int A(int a,int b);則指針爲typedef int (*Node)(int ,int); 函數是int A(int a);則指針爲typedef int (*Node)(int ,);)
如下代碼所示:
#include<iostream>
using namespace std;
int add(int a, int b)
{
a += b;
return a;
}
int dele(int a, int b)
{
a -= b;
return a;
}
int main()
{
typedef int(*Node)(int, int);
Node bb = add; //第一種
cout << bb(1, 2) << endl;
Node cc = dele; //第二種
cout << cc(1, 2) << endl;
system("pause");
return 0;
}
上面通過定義,指針分別指向了兩個函數,add和dele,則此時指針便可替代函數,直接使用。
再看指針函數數組
#include<iostream>
using namespace std;
int add1(int a, int b) //加法
{
a += b;
return a;
}
int add2(int a, int b) //減法
{
a -= b;
return a;
}
int add3(int a, int b) //乘法
{
a = a*b;
return a;
}
int add4(int a, int b) //除法
{
a = a/b;
return a;
}
int main()
{
typedef int(*Node)(int, int);
Node ff[]{add1,add2,add3,add4}; //函數指針數組
for (int i = 0; i < sizeof(ff) / sizeof(ff[0]); i++)
{
cout << ff[i](1,2)<<endl;
}
system("pause");
return 0;
}
上面定義了四個結構相似的函數,然後定義一個函數指針數組來保存四種函數。
然後通過數組中的四次調用得到最終函數指針結果;