c 函式指標簡單例項

2022-08-28 14:45:22 字數 1574 閱讀 4985

一開始看函式指標的時候我是很懵的,因為不知道它有什麼用,之後慢慢就發現了自己的愚昧無知。

假設我們想實現乙個資料結構,比如二叉搜尋樹,堆。又或者是乙個快排,歸併排序。

我們一般是直接在兩個數要比較的時候直接採用運算子比較大小,但是這樣的缺點是,如果我要大頂堆就要單獨寫大頂堆,小頂堆也要單獨實現。

很明顯這樣的**復用性很低,兩串除了比較運算子不同其他全部相同的**自己看著也難受,這個時候就是函式指標出馬的時候了。比如下面我寫的這個堆

#includeusing

namespace

std;

const

int maxn = 100007

;typedef

bool (*pf)(int,int);///

這句定義意思是:pf型別是指向bool (int, int)型別函式的函式指標

bool cmp1(int a, int b) ///

struct

heap;///

預設用大頂堆的比較函式大頂堆

void shift_up(int

now)

else

break

; }

}void shift_down(int

now)

else

break

; }

}bool empty()

int top()

void

pop()

void push(int

val)

};

(如果寫錯了告訴我一下,我寫完沒嚴謹的測試一下, 因為重點是講函式指標)

上面那個函式裡面有乙個函式指標;

這個指標在建構函式裡初始化是cmp2,為了構建大頂堆。

但是我們要小頂堆也很容易,heap hh(cmp1);這樣定義出來的hh就是小頂堆,同理我們就可以實現自己的二叉搜尋樹等等。

比如下面的這個快排就是用傳入的函式指標來排序,這樣可以公升序降序都沒問題。、

1 #include2

using

namespace

std;

3const

int maxn = 100007

;4 typedef bool (*pf)(int,int);///

這句定義意思是:pf型別是指向bool (int, int)型別函式的函式指標

5bool cmp1(int a, int b) ///

7int single_sort(int l, int r, int num, pf cmp=cmp1)

17 num[l]=key;

18return

l;19}20

void qsort(int l, int r, int num, pf cmp=cmp1)

26int

main() ;

28 qsort(0, 9

, num, cmp2);

29for(int i=0; i<10; ++i)

32 }

快速排序

同理其他排序也可以做到這樣

函式指標例項

1.定義 每乙個函式都占用一段記憶體單元,它們有乙個起始位址,指向函式入口位址的指標稱為函式指標。2.語法 指向函式的指標變數的一般定義形式為 資料型別 指標變數名 參數列 3.說明 1 函式指標的定義形式中的資料型別是指函式的返回值的型別。2 區分下面兩個語句 int p int a,int b ...

C 函式指標簡單使用

函式指標必須包含要呼叫的函式的記憶體位址,為了工作正確,指標還必須包含其他資訊,即指標所指向的函式的引數列表中的引數型別以及返回型別。因此,在宣告函式指標時,必須指定該指標可以指向的函式的引數型別和返回型別,以及指標名。函式指標的一般形式如下 返回型別 指標明名 引數型別列表 注意 指標名上的括號是...

函式指標例項2

c語言函式指標的定義形式 返回型別 函式指標名稱 引數型別,引數型別,引數型別,c 函式指標的定義形式 返回型別 類名稱 函式成員名稱 引數型別,引數型別,引數型別,以下 編譯環境 codeblocks with gcc in win 7 c語言函式指標使用舉例 複製 include include...