標籤:
函數指標函數指標:指向函數的指標變數,在C編譯時間,每一個函數都有一個入口地址,那麼指向這個函數的函數指標便是指向這個地址。函數指標主要有兩個作用:用作調用函數和做函數的參數。
int (*func)(int x);
諸如上面的代碼這是申明了一個函數指標,代碼(*func)中括弧是必須的,這會告訴編譯器這是一個函數指標而不是聲明一個具有傳回型別為指標的函數,後面的形參要是這個函數所指向的函數形參而定。使用如下面的代碼:
#include <iostream>using namespace std;int(*func)(int a, int b);int bar(int a, int b){return a + b;}int foo(int a, int b){return a;}int _tmain(int argc, _TCHAR* argv[]){func = bar;cout << func(12, 34) << endl;system("pause");func = foo;cout << func(12, 34) << endl;system("pause");return 0;}
這樣的聲明有些繁瑣,其實可以使用typedef來進行簡化:
#include <iostream>using namespace std;typedef int(*PF)(int, int);//int(*func)(int a, int b);int bar(int a, int b){return a + b;}int foo(int a, int b){return a;}int _tmain(int argc, _TCHAR* argv[]){PF func;func = bar;cout << func(12, 34) << endl;system("pause");func = foo;cout << func(12, 34) << endl;system("pause");return 0;}
函數指標的另一個作用就是作為函數的參數,可以在一個函數的形參列表中傳入函數指標,然後邊可以在這個函數中使用這個函數指標所指向的函數,這樣邊可以使程式變得更加清晰和簡潔。
#include <iostream>using namespace std;typedef int(*PF)(int, int);//int(*func)(int a, int b);int bar(int a, int b){return a + b;}int foo(int a, int b){return a;}void func(int a, int b, PF ptr){cout << ptr(a, b) << endl;return;}int _tmain(int argc, _TCHAR* argv[]){PF ptr;ptr = bar;func(12, 34, ptr);system("pause");ptr = foo;func(12, 34, ptr);system("pause");return 0;}
指標函數與函數指標相區別的定義應該就是指標函數,指標函數本質上是一個函數,是指函數的傳回值為指標的函數,一般是形如下的函數:
int* func(int x,int y);
其實就是傳回值是指標的函數,這個只要記住是什麼形式就行了,不是很難懂。
C++指標函數和函數指標