1. 程式人生 > >C語言 函式指標呼叫時加星號與不加星號?

C語言 函式指標呼叫時加星號與不加星號?

函式指標在賦值以後,例如通過庫動態載入方式,然後在使用時,程式呼叫遇到了既加星號,也有不加星號的方式,因此有點疑惑。

先上例項,再作分析

#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標準把這二者作為等價形式全部接受!!!