函式指標:是指向函式的指標變數,在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++敞開了一道天窗,但隨之而來的便是一些複雜的問題和陷阱,如何去蔽揚利還需要我們不斷學習和探索。
函式 作用域 指標
實參與形參 值傳遞 實參賦值給形參之後,形參在函式體內發生的變化,不會傳回給實參 個數的對應關係 型別轉換 int result power 10 nslog d result int a 10 plus a nslog in main a d a fa 1,2,3,4,5 當無形參時,實參會被忽略...
函式指標的作用 visit函式
函式指標是指向函式的指標變數。因此 函式指標 本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數 字元型 陣列一樣,這裡是指向函式。如前所述,c在編譯時,每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如...
關於函式指標的作用域
今天在mfc工程中使用了wm user定義使用者訊息,從文件中得知on message的訊息處理函式應該符合如下格式 afx msg lresult cwnd wparam,lparam 其中的作用域 cwnd 引起了我的好奇。我們知道,訊息處理函式只能在cwnd的派生類中定義或者過載,其作用域必然...