函數(shù)聲明
例如:
float?func(int,?int);
以上就是一個函數(shù)的聲明,要注意它的實際功能并沒有被實現(xiàn),換句話說就是它并沒有被定義,只是聲明此函數(shù)的存在。要想調(diào)用次函數(shù),你必須對對此函數(shù)進行定義。例如,可以定義如下:
float?func(int?a,?int?b){ ??return?(float)(a+b); }
float func(int,int);
在計算機語言里被叫做表達式,此表達式說明func(int,int)
返回的是一個float
的數(shù),func
是函數(shù)地址(特別注意,他不是指針,而是函數(shù)在內(nèi)存中的地址),它可以接受兩個int
型的數(shù)據(jù)作為傳入?yún)?shù)。
函數(shù)指針
下面就是一個函數(shù)指針:
float?(*pf)(int,int);
這里pf就是一個函數(shù)指針變量,他可以接受的參數(shù)是兩個int
,返回值為float
。所以這個函數(shù)指針變量可以存放返回值為float
,并且接受兩個int
為傳入?yún)?shù)的函數(shù)地址。
我們可以做如下賦值運算:
pf?=?func;
調(diào)用func函數(shù)也就可以寫成pf(…).
實驗
實驗代碼如下:
#include#includefloat?func(int,?int); int?main(int?argc,?char**?argv){ ????float?(*pf)(int,?int); ????pf?=?func; ????printf("%fn",?pf(1,?2)); ????printf("%.16Xn",?(uint64_t)(pf)); ????printf("%.16Xn",?(uint64_t)(func)); ????printf("%.16Xn",?(uint64_t)(&func)); ????printf("%.16Xn",?(uint64_t)(&pf)); ????return?0; } float?func(int?a,?int?b){ ????return?(float)(a?+?b); }
其中一次執(zhí)行結(jié)果如下:
3.000000 0000000025051005 0000000025051005 0000000025051005 000000004547FD08
注意輸出結(jié)果的第二行,第三行以及第四行是相同的;最后一行與這三行是不同的。這說明:
bf
這個變量存放的內(nèi)容是func
的內(nèi)容。func
本身就是地址,所以取地址符號并沒有對輸出值產(chǎn)生影響。bf
本身是個存放地址的變量,他自己也有地址,他的地址就是輸出結(jié)果的最后一行。