C++指標函數和函數指標

來源:互聯網
上載者:User

標籤:

函數指標函數指標:指向函數的指標變數,在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++指標函數和函數指標

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.