C 中的函式指標和函式物件總結

2021-09-22 22:25:20 字數 1324 閱讀 6244

一、函式指標

函式指標:是指向函式的指標變數,在c編譯時,每乙個函式都有乙個入口位址,那麼這個指向這個函式的函式指標便指向這個位址。

函式指標的用途是很大的,主要有兩個作用:用作呼叫函式和做函式的引數。

函式指標的宣告方法

資料型別標誌符 (指標變數名) (形參列表);

一般函式的宣告為: 

int func ( int x );

而乙個函式指標的宣告方法為:

int (*func) (int x);

前面的那個(*func)中括號是必要的,這會告訴編譯器我們宣告的是函式指標而不是宣告乙個具有返回型為指標的函式,後面的形參要視這個函式指標所指向的函式形參而定。

然而這樣宣告我們有時覺得非常繁瑣,於是typedef可以派上用場了,我們也可以這樣宣告:

typedef int (*pf) (int x);

pf pf;

這樣pf便是乙個函式指標,方便了許多。當要使用函式指標來呼叫函式時,func(x)或者  (*fucn)(x) 就可以了,當然,函式指標也可以指向被過載的函式,編譯器會為我們區分這些過載的函式從而使函式指標指向正確的函式。

例子:

typedef void (*pft) ( char ,int );

void bar(char ch, int i)

};a a;

a(5);

這樣a就成為乙個函式物件,當我們執行a(5)時,實際上就是利用了過載符號()。

函式物件既然是乙個「類物件」,那麼我們當然可以在函式形參列表中呼叫它,它完全可以取代函式指標!如果說指標是c的標誌,類是c++特有的,那麼我們也可以說指標函式和函式物件之間的關係也是同前者一樣的!(雖然有些嚴密)。當我們想在形參列表中呼叫某個函式時,可以先宣告乙個具有這種函式功能的函式物件,然後在形參中使用這個物件,他所作的功能和函式指標所作的功能是相同的,而且更加安全。

下面是乙個例子:

class func

funct funct;

addfunct(2,4,funct);

addfunct(1.4,2.3,funct);

大名鼎鼎的stl中便廣泛的運用了這項技術,詳細內容可參見候捷大師的一些泛型技術的書籍,不要以為函式物件的頻繁呼叫會使程式效能大大折扣,大量事實和實驗證明,正確使用函式物件的程式要比其他程式效能快很多!所以掌握並熟練運用函式物件才能為我們的程式加分,否則.......

如此看來,函式物件又為c++敞開了一道天窗,但隨之而來的便是一些複雜的問題和陷阱,如何去蔽揚利還需要我們不斷學習和探索。

C 中的函式指標和函式物件總結

原文 篇 一 函式指標 函式指標 是指向函式的指標變數,在c編譯時,每乙個函式都有乙個入口位址,那麼這個指向這個函式的函式指標便指向這個位址。函式指標的用途是很大的,主要有兩個作用 用作呼叫函式和做函式的引數。函式指標的宣告方法 資料型別標誌符 指標變數名 形參列表 一般函式的宣告為 int fun...

C 中的函式指標和函式物件總結

第一篇 函式指標 函式指標,表示的是乙個指標,它指向的是乙個函式,它含義是指指向函式的指標變數,在c編譯時,每乙個函式都有乙個入口位址,那麼這個指向這個函式的函式指標便指向這個位址。函式指標的用途是很大的,主要有兩個作用 1 用作呼叫函式 2 做函式的引數。函式指標的宣告方法 資料型別標誌符 指標變...

C 函式指標和函式物件的總結

轉自 篇一 函式指標 函式指標 是指向函式的指標變數,在c編譯時,每乙個函式都有乙個入口位址,那麼這個指向這個函式的函式指標便指向這個位址。函式指標的用途是很大的,主要有兩個作用 用作呼叫函式和做函式的引數。函式指標的宣告方法 資料型別標誌符 指標變數名 形參列表 一般函式的宣告為 int func...