不要再忘記的function pointer

先貼上一段程式碼(參考自K&R2 Ch5.11)
  1. #include <stdio.h>
  2. typedef int (*returnInt)(void*, void*);
  3. struct A
  4. {
  5. returnInt comp;
  6. };
  7. int numcmp(char* s1, char* s2)
  8. {
  9. double v1, v2;
  10. v1 = atof(s1);
  11. v2 = atof(s2);
  12. if (v1 < v2)
  13. return -1;
  14. else
  15. return 0;
  16. }
  17. int main()
  18. {
  19. struct A a;
  20. a.comp = numcmp;
  21. int o = a.comp("6", "5");
  22. printf("%d", o);
  23. return 0;
  24. }
輸出結果:
0

行3:用typedef來宣告函數指標(function pointer),之後只要寫retutnInt,就算是寫整個函數指標,不用每一個地方都寫完整的函數指標宣告式。
function pointer的型別,包含它的返回值與參數列。
function pointer的名稱,就是...它的名稱。
用typedef的話,是另外取一個名稱代替它的型別,所以第7行才可以只寫名稱不寫完整的宣告式。

行7:在struct A中,有一個函數指標(function pointer),可以把它當作是c#的委派宣告。(因為函數的返回值與參數必須相同)
行26:指定要執行的function(在此尚未執行)
行28:使用方式,像C++的member function直覺。執行指定的function。

沒有留言:

張貼留言

(什麼是留言欄訊息?)