//測試函數指標類型的定義,和,用法//何為數指標類型//何為指向數指標類型的類型 #include <stdio.h>typedef unsigned int u32;//自訂一個新的定義函數類型 typedef int (*idtt_receive_func_t)(void *data, u32 len);//傳回值為int,參數為data,len的函數類型 //如果int後有*,表示返回的是指標 idtt_receive_func_t idtt_receive_cb;//注意這裡不能有*, 因為函數類型本身就是一個指標,表示函數代碼體的入口地址 int aoe (void *buf, int len){char *p = (char *)buf;p[len] = 0;printf(p);return 99;}char (*pFun)(int); //定義了一個函數類型的指標變數 char glFun(int a){return 77;}int main(){int ret = 0;printf("%x\n", idtt_receive_cb); idtt_receive_cb = aoe; //這句會有個警告,[Warning] assignment from incompatible pointer type //idtt_receive_cb = (idtt_receive_func_t *)aoe;//自己往自己所屬的類型轉換,好處是這不會警告 printf("%x\n", idtt_receive_cb); char buf[] = {'a', 'e','r'};//ret = idtt_receive_cb((void *)buf, 3);ret = (*idtt_receive_cb)((void *)buf, 3);// (*idtt_receive_cb)(...)和idtt_receive_cb(....)結果是一樣的 printf("\n%d\n", ret);//這會捕獲一個傳回值 pFun = glFun;printf("%d\n", (*pFun)(2)); //printf("%d\n", pFun(2)); //和上一句調用結果一樣 }//函數類型,作為參數和傳回值的類型,C語言也能實現一些lisp中簡單一些lambda語句,只是沒lisp那麼靈活.//參考:http://hi.baidu.com/sean_zhu_xiang/item/90465709265e88eb34990217