前天跟張貿翔老師的計概課
Pointer to void 可存任意型態的指標
使用: void* p; //
double i;
p = &i;
Pointer to function 指標指向一段程式的起始位置
使用:
double (*f) (float); // 指標 f 指向某個function,其傳入參數型態為 float,回傳型態為 double
f = X; // f 指向function X,X意即代表X這個函式的起始位置
result = (*f)( v1 ); // result 型態要double,v1 要float
C語言編譯器的程式庫參考手冊, 有一組與 ANSI C 相容的函數 qsort, bsearch
規格說明:
void qsort(void *base, sizt_t nelem, size_t width,
int (*fcmp)(const void *, const void *));
void bsearch(const void *key, const void *base, size_t nelem, size_t width,
void bsearch(const void *key, const void *base, size_t nelem, size_t width,
int (*fcmp)(const void *, const void *));
以上 #include <stdlib.h> 則可使用
qsort (待排序 data 的起始位置, data的個數, data的大小,單位byte, 一個做比較大小的函式)
其中
int (*fcmp)(const void *, const void *)) 代表會呼叫一個使用者自製的函式
如果今天要使用 qsort 排序 int,則我們製作的是一個可以比較兩個int參數大小的 function
如果今天要使用 qsort 排序 int,則我們製作的是一個可以比較兩個int參數大小的 function
像這樣: int ComInt( const int *x, const int *y ){ statement }
然而
如果今天要使用 qsort 排序 string,那我們要製作的就是根據我們自己定義(怎樣是大? 怎樣是小?)比較大小的 function
所以這就是 function pointer 的一個優點:
在製作一個可以比較廣泛使用(如上可以排序各種型態)的函式時,幫助使其簡化(只針對參數稍微調整程式)。
另外,在 int (*fcmp)(const void *, const void *)) 中傳入的參數是指標型態,而不是只傳 value,(只是做比較又沒有要改值,可以傳 value 就好阿?)
這是由於在比較大小時,當我們比較的不是 float, char 等基本數型,而是字串(即字元陣列)時,qsort 才能夠正確的運作。
全站熱搜
留言列表