函式指標的作用 visit函式

2021-10-21 02:09:09 字數 1918 閱讀 4275

函式指標是指向函式的指標變數。 因此「函式指標」本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。如前所述,c在編譯時,每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是大體一致的。函式指標有兩個用途:呼叫函式和做函式的引數。

int

f(elementtype x)

;//宣告函式

int(

*f1)

(elementtype x)

;//宣告函式指標

f1=f;

//函式首位址賦值

f1=&f;

//函式位址賦值

示例:(使用方法)

#include

intmax

(int x,

int y)

intmain()

個人感覺函式指標最大的作用就是作為函式的引數,當函式需要乙個函式作為形參,而這個函式形參未定義或者不確定應該輸入哪個函式時,函式指標的作用就體現出來了,使用位址傳遞的方式,利用函式指標作為形參可以很好地解決這個問題,這有利於程式的模組化與封裝性

例如:像二叉樹遍歷中使用的*visit()函式指標,我們並不清楚,visit應該是輸出、操作、賦值等等哪乙個函式,因此使用*visit函式指標,等實際輸入時再確定它是哪乙個函式。

template

<

class

t>

void bintree

::preorder

(bintreenode

*subtree,

void

(*visit)

(bintreenode

*s))

}void

printnode

(bintreenode<

char

>

*tnode)

intmain()

我們可以將printnode函式定義為模板函式

template

<

class

t>

void

printnode

(bintreenode

*tnode)

但如果在主函式裡定義visit的函式指標模板, 直接如下所示

template

<

class

t>

void

(*visit)

(bintreenode

*tnode)

;

c++會報錯,(原因我也不太清楚)

解決方法: 把函式指標封裝在乙個模板結構或模板類裡,像在bintree類中,我們定義乙個模板函式指標就可以通過

template

<

class

t>

struct type

;

或是放到乙個模板函式內,讓函式指標作為乙個形參,在函式內再呼叫指標指向的函式,但這樣也就沒有特意定義它的必要,他也就像二叉樹遍歷函式中的用法一樣,作為函式形參,不需要特別定義。

template

<

class

t>

void

func

(void

(*visit)

(bintreenode

*tnode)

,bintreenode

*tnode)

函式指標作用

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

函式 作用域 指標

實參與形參 值傳遞 實參賦值給形參之後,形參在函式體內發生的變化,不會傳回給實參 個數的對應關係 型別轉換 int result power 10 nslog d result int a 10 plus a nslog in main a d a fa 1,2,3,4,5 當無形參時,實參會被忽略...

關於函式指標的作用域

今天在mfc工程中使用了wm user定義使用者訊息,從文件中得知on message的訊息處理函式應該符合如下格式 afx msg lresult cwnd wparam,lparam 其中的作用域 cwnd 引起了我的好奇。我們知道,訊息處理函式只能在cwnd的派生類中定義或者過載,其作用域必然...