這是一個(gè)回調(diào)函數(shù)類(lèi)型定義,函數(shù)的回值是int 類(lèi)型,并且有一個(gè)int 類(lèi)型的參數(shù)。
創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、鐘山網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為鐘山等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
typedef int (CALLBACK *SHUTDOWNDLG) (int)
說(shuō)明是類(lèi)型定義 返回值 回調(diào) 指針 參數(shù)
在C語(yǔ)言里,函數(shù)名實(shí)際上是一個(gè)指向函數(shù)起始地址的指針。
這樣定義后就可以用以下的方式定義函數(shù):
SHUTDOWNDLG ShutdownDlg;
接著就可以把一個(gè)類(lèi)型相同的函數(shù)的地址賦給 ShutdownDlg,比如用API函數(shù) GetProcAddress 返回的函數(shù)地址,然后我們就可以調(diào)用函數(shù)了,比如:
Shutdown(4);
為什么要這樣做呢,原因是,有時(shí)我們需要調(diào)用一個(gè)DLL中的函數(shù),但事先沒(méi)有這個(gè)函數(shù)的定義,雖然我們知道這個(gè)函數(shù)的函數(shù)名和參數(shù)類(lèi)型,但編譯器不知道啊,如果我們直接調(diào)用的話(huà),將無(wú)法編譯。所以要先定義,再用LoadLibrary加載DLL,然后用 GetProcAddress 找到這個(gè)函數(shù)的地址,最后才能調(diào)用函數(shù)。
要知道m(xù)ain函數(shù)也是由其他的程序調(diào)用的。
我們編寫(xiě)的程序,最終是不存在所謂的函數(shù)名的,有的只有內(nèi)存單元地址0xffeedd00.
我們的程序執(zhí)行時(shí),程序加載到內(nèi)存,比方說(shuō)整個(gè)程序所占用的內(nèi)存范圍是0xffee0000 ~ 0xffeedd00,這么多。
假設(shè)程序有一個(gè)小函數(shù)fun(),那么它的范圍可能是0xffee0000~0xffee00ff。
那么函數(shù)fun()的入口地址是多少? 0xffee0000。。
那么函數(shù)名fun實(shí)際上就是0xffee0000的別稱(chēng)。
你用一個(gè)指針指向這個(gè)函數(shù),那么你把 指針 = 函數(shù)名,實(shí)際就是把0xffee0000這個(gè)內(nèi)存單元的地址給指針p。
所以,結(jié)論是:
函數(shù)名 是 程序在執(zhí)行時(shí), 函數(shù)所占內(nèi)存單元塊的 首地址 的別稱(chēng)。
你調(diào)用一個(gè)函數(shù) 你得指定哪一個(gè)是吧 就是 你一個(gè)班的學(xué)生 你找哪一個(gè)就叫他的名字是吧
例
void set()
{
}
這個(gè)set就是函數(shù)名
常量,常量就是常數(shù),就多了個(gè)字符常量,需要注意常量不能在等號(hào)的左邊哦,變量就是你定義的量,一般在等號(hào)的左邊,函數(shù)名就相當(dāng)于你在的學(xué)校名,學(xué)校里有很多班,班就相當(dāng)于變量,
是的。函數(shù)指針就是函數(shù)的指針,它是一個(gè)指針,指向一個(gè)函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。
例:
A) char * (*fun1)(char * p1,char * p2);
B) char * *fun2(char * p1,char * p2);
表達(dá)式相比,唯一不同的就是函數(shù)的返回值類(lèi)型為char**,是個(gè)二級(jí)指針。
C) char * fun3(char * p1,char * p2);
fun3是函數(shù)名,p1,p2是參數(shù),其類(lèi)型為char *型,函數(shù)的返回值為char *類(lèi)型。
擴(kuò)展資料
函數(shù)指針使用的例子
#include stdio.h
#include string.h
char * fun(char * p1,char * p2)
{
int i = 0;
i = strcmp(p1,p2);
if (0 == i)
{
return p1;
}
else
{
return p2;
}
}
int main()
{
char * (*pf)(char * p1,char * p2);
pf = fun;
(*pf) ("aa","bb");
return 0;
}
函數(shù)名
就是函數(shù)的名字,只要符合命名規(guī)范的名字都可以作為函數(shù)名
例如
int
fun()
{
}
那么這個(gè)函數(shù)的名字就是
fun
int
fun2()
{
}
那么這個(gè)函數(shù)的名字就是
fun2