一、函數指針的聲明與初始化
...
int max_fun(int a, int b);
/*函數指針的聲明,聲明瞭兩個形參都爲int類型,返回值爲int類型的函數指針*/
int (*fp)(int, int);
/*指針初始化*/
fp = max_fun; //fp = &max_fun 也正確
/*函數指針初始化後的調用*/
fp(a,b); //(*fp)(a,b);也正確
...
二、函數指針的typedef
typedef void (*irq_func)(int);
//定義一個數組,存放中斷函數指針,其參數類型爲irq_func
irq_func irq_array[32];
三、函數指針數組的使用
/* 註冊中斷函數,將中斷函數以指針形式存放在數組中 */
void register_irq(int irq, irq_func fp)
{
irq_array[irq] = fp;
INTMSK &= ~(1 << irq); //關閉中斷屏蔽
}
/* 此處將fp函數傳入數組,由於函數名在表達式會蛻變爲指針,
* 所以調用register_irq()時第二個參數只需要傳入函數名
*/
register_irq(0, key_eint_irq);
數組元素的使用:irq_array[bit](bit); 將irq_array[bit]替換爲一個函數名更容易理解。