[英]Explain typedef for function used in qsort library
我正在使用qsort庫函數對結構元素數組進行排序,而在Internet上搜索時我找到了一個資源: INFO:使用C qsort()函數 @support.microsoft 對結構進行排序 。
我知道qsort函數需要通用指針進行類型轉換。
但是我無法得到這一行:
typedef int (*compfn) (const void*, const void*);
已宣布的內容及其隨后的致電:
qsort((void *) &array, // Beginning address of array
10, // Number of elements in array
sizeof(struct animal), // Size of each element
(compfn)compare // Pointer to compare function
);
typedef
是如何表現的,我的意思是我們究竟有什么類型的intdeffed int (*compfn)
或int (compfn)
? (*compfn)
? 句法:
typedef int (*compfn) (const void*, const void*);
^ ^ ^ ^ ^
| return type | arguments type
| new type name
defining new type
compfn
是由typedef
關鍵字定義的新用戶定義type
,
所以,你有正確的typedefded int (*)(const void*, const void*);
使用我上面描述的語法來comfn
。
聲明:
compfn fun; // same as: int (*fun) (const void*, const void*);
表示fun
是一個函數指針,它接受const void*
types的兩個參數並返回int
。
假設你有一個像這樣的函數:
int xyz (const void*, const void*);
那么你可以將xyz
地址分配給fun
。
fun = &xyz;
在調用qsort()
:
在表達式(compfn)compare
一個函數compare
(compfn)
類型函數。
一個疑問:
不應該呼叫
(*compfn)
。
不,它的類型名稱不是函數名稱。
注意 :如果你只是寫int (*compfn) (const void*, const void*);
如果沒有typedef,那么comfn
將是一個指向函數的指針,該函數返回int
並獲取兩個類型為const void*
參數const void*
typedef
聲明為特定類型創建別名 。 這意味着它可以在聲明和定義中用作任何其他類型。
所以如果你有例如
typedef int (*compfn)(const void*, const void*);
然后,您可以僅使用compfn
而不是整個函數指針聲明來聲明變量或參數。 例如,這兩個聲明是相同的:
compfn function_pointer_1;
int (*function_pointer_2)(const void*, const void*);
兩者都創建了一個函數指針變量,唯一的區別是變量名的名稱。
當你有長而復雜的聲明時,使用typedef
是很常見的,這樣既可以輕松編寫這樣的聲明,也可以使它更容易閱讀。
它是一種函數指針。 被指向的函數返回int
並接受兩個const void*
參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.