先上實例,再作分析
#include <stdio.h>
void myfun(void);
int main(void)
{
void (*pf)(void);
pf = myfun; /* 也可以這樣賦值:pf = &myfun; 其道理同下*/
(*pf)();
pf();
return 0;
}
void myfun(void)
{
printf("hello world!\n");
}
第一種方法:因為pf指向myfun函數,*pf就是myfun函數,因此表達式(*pf)()與myfun()一樣。
從myfun和pf的聲明中就能看出myfun和(*pf)是等價的。
第二種方法:因為函數名是一個指針,可以互換地使用指針和函數名,因此pf()與myfun()一樣。
從pf的賦值語句中就能看出pf和myfun是等價的。
這是c發展過程的歷史原因,代表兩幫人的不同觀點而已!
但,最關鍵的一點,c標准把這二者作為等價形式全部接受!!!