typedef的高級用法---------理解函數聲明


最近在看《c陷阱與缺陷》這本書  第一張就介紹了函數聲明,才知道函數指針可以聲明,怎么樣聲明。

 

 

首先 typedef 書上的用法就是,用聲明表達式的標識符作為其標識符類型對應的別名。

例如

    typedef int a;
    /*
    此時a就是int 類型的別名
    */
    typedef char fuc[10];
    /*
    fuc 代表一個長度為10的字符數組名(字符指針)類型
    */
    typedef void (*fp)(int);
    /*
    fp 代表一個函數指針,該指針指向的函數為   返回值為void,參數為一int類型的函數;
    */

其中書上有一個例子

一個signal函數, signal函數接受兩個參數一個代表需要"被捕獲"的特定signal的整數值,另一個是指向用戶提供的函數指針,該函數用於處理“捕獲到”的特定signal,返回值類型為void ,signal函數返回值為函數指針該函數指針類型與第二個參數相同。

如果要直接聲明

void (*signal(int ,void(*)(int)))(int);

大部分程序員都這段代碼就很費勁了。

如果用typedef就很容易明白了

typedef void (*fp)(int);
fp signal(int,fp);

 

 

最后幾個c函數的特殊方面

1.func是個函數名,func的值是函數的地址,&func的值也為函數地址;(*func)(something)為調用對應函數,(*(&func))(something)調用對應的函數,但一般都傾向於用二種寫法,符合普通指針的定義。

2.任何變量使用前都需要聲明,包括函數。

3. c語言要求:在函數調用時即使不帶參數,也應該包括參數列表,因此如果f是一個函數。

f();

是一個函數調用語句,而

f;

卻是一個什么都不做的語句,更精確的說,這個語句計算函數f的地址,卻並不調用該函數。

 


免責聲明!

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



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