前言:
函式也有位址, 函式的位址時儲存其機器語言**(即二進位制的位元組碼)的記憶體的開始位址.通常, 這鞋位址對使用者而言, 既不重要, 也沒有什麼用, 但是對程式卻很有用
當知道位址之後, 就可以宣告指標, 指標就可以指向函式的位址, 有了位址和指標, 就可以將函式的指標傳作為引數傳遞給另乙個函式.
與直接呼叫另乙個函式不同的是, 它允許在不同的時間傳遞不同的函式位址. 這意味著可以在不同得時間使用不同的函式.
當我們要將函式的位址 作為引數 傳給另外乙個函式時, 需要有以下三個條件才能達到要求:
1. 獲取函式的位址.
2. 宣告乙個函式的指標.
3. 使用指向函式的指標來呼叫函式.
一. 獲取位址
方法: 直接使用函式名, 不跟任何引數.
例:有乙個函式名為think(), 則 think 就是函式的位址., 作為引數傳遞時, 直接傳遞函式名就可以, 如:
process(think)
二. 宣告函式指標
宣告函式的指標時, 和其他宣告其他型別的指標一樣, 都需要先確定 這個指標是指向哪一型別資料的指標,
而函式指標特殊的是, 一方面要指定返回型別, 一方面要指定函式的特徵標(形式引數列表)
例如以下乙個估算時間的函式, 原型如下:
double pam(int) ;
則該函式的對應指標應為:
double (*pf) (int);
返回值 函式名 引數列表
仔細觀察發現, 函式指標與函式原型的唯一區別就是, 將函式名pam 改為了(*pf)
即 pam=(*pf)
pam是乙個函式, (*pf) 也就是函式
(*pf) 是函式, 那麼pf就是函式的指標;
正確宣告之後, 就可以進行賦值
pf = pam;
如果指標與函式原型不匹配, 無法成功賦值
成功賦值後, 即可呼叫
前面說過, (*pf)=pam
所以呼叫時, 直接將(*pf) 看做pam直接進行替換就行
(*pf)(5)
實際上, c++ 也允許不加*號, 直接使用指標呼叫函式
pf(5)
但是可讀性會較差, 而且容易產生誤解.
C 指向函式的指標和返回指標的函式
每乙個函式在計算機內部都有儲存單元,通過記憶體可以反問到這個函式,指標可以指向記憶體中的某乙個位置,可以用指標指向函式的初始位置。一般定義形式 資料型別 指標 參數列 資料型別指的是函式返回的資料型別,右側是參數列,指標指向函式的引數型別。注意與返回指標的函式之間的區別 int p int 是乙個指...
C 指向函式的指標
c 函式 也和物件一樣,都是儲存在記憶體中的,所以函式也是有記憶體位址的。但是函式指標是不予許修改的。只可以有兩種操作 1.呼叫函式,2 獲取其位址。void error string s void efct string 確定函式指標的類別 void f 函式指標和一般指標不同,用和不用 操作都是...
函式指標(指向函式的指標)和指標函式的區別
函式指標和指標函式的區別 一 函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別...