typedef void (*funcptr)(void)


 
        
這些都是為一些“函數指針”類型定義一個別名,因為函數指針的類型通常十分長,寫起來麻煩。
http://zhidao.baidu.com/link?url=E7C4s3srK-QzUqI5OZBSst-fzFKgtGyNaZf2GWEWvW8ruHC8XI1v4RjxsXZ8SvArPewsrPlXjy3F3SkkIB3-Hq
例如第一個,這個函數的原型是void f(CO_Data*);,
經過了typedef void (*post_sync_t)(CO_Data*);后,post_sync_t就是f類型函數的指針的類型別名。

這時你可以這樣定義一個變量:post_sync_t p;,p就是一個指向f類型函數的指針。
可以這樣給p賦值,p=&f。

如果你不typedef的話,定義p時你就得這樣寫:void (*p)(CO_Data*);


http://zhidao.baidu.com/question/170422609.html?fr=qrl&index=0&qbl=topic_question_0&word=typedef%20void%20%28%2AFPtr%29%28void%29%3B

定義一個函數指針類型。
比如你有三個函數:
void hello(void) { printf("你好!"); }
void bye(void) { printf("再見!"); }
void ok(void) { printf("好的!"); }

typdef void (*funcptr)(void);
這樣就構造了一個通用的函數
你用的時候可以這樣:
void speak(int id)
{
funcptr words[3] = {&hello, &bye, &ok};
funcptr fun = words[id];
(*fun)();
}

這樣的話,如果speak(0)就會顯示“你好!”
speak(1)就會顯示“再見!”
speak(2)就會顯示“好的!”

用於處理參數和返回值的形式都一樣,但是功能不確定的一組函數,可以使用函數指針。

比如算術運算符,加、減、乘、除,都可以用typedef int (*calc)(int,int)代表,等等

eg.
 
 
 
         typedef void (*funcptr)();
void hello(void) { printf("你好!\n"); }
void bye(void) { printf("再見!\n"); }
void ok(void) { printf("好的!\n"); }
void speak(int id)
{
    funcptr words[3] = {&hello,&bye,&ok};
   funcptr fp = words[id];
   (*fp)();
}
 
        
int main()
{
    speak(0);
    speak(1);
    speak(2);
    return 0;
}
 
 
 
         
 
        




熱心網友
typedef void (*T) (void *);定義了一個指向函數的指針T,其返回值 void 類型,參數也是后面的(void *)接下來我們就可以直接使用 T 來定義這種指針變量,比如:T fn1; //等價於void fn1 (void *); 
使用:void func(void *); //聲明函數
T fn1; //定義變量
fn1=func; //賦值
(*fn1)(); //執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM