C 指向函式的指標和遞迴

2022-08-26 12:12:10 字數 1115 閱讀 3921

前言:

函式也有位址, 函式的位址時儲存其機器語言**(即二進位制的位元組碼)的記憶體的開始位址.通常, 這鞋位址對使用者而言, 既不重要, 也沒有什麼用, 但是對程式卻很有用

當知道位址之後, 就可以宣告指標, 指標就可以指向函式的位址, 有了位址和指標, 就可以將函式的指標傳作為引數傳遞給另乙個函式.

與直接呼叫另乙個函式不同的是, 它允許在不同的時間傳遞不同的函式位址. 這意味著可以在不同得時間使用不同的函式.

當我們要將函式的位址  作為引數 傳給另外乙個函式時, 需要有以下三個條件才能達到要求:

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 函式指標定義 函式型別 指標變數名 形參列表 函式型別...