再學(xué)習(xí)函數(shù)指針的時候,見過這么一個例子:
公司專注于為企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、微信公眾號開發(fā)、購物商城網(wǎng)站建設(shè),小程序定制開發(fā),軟件按需策劃設(shè)計等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗,我們會仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計、整合,為客戶設(shè)計出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)建站更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
int func(int x); /* 聲明一個函數(shù) */
void (*f) (int x); /* 聲明一個函數(shù)指針 */
f=func; /* 將func函數(shù)的首地址賦給指針f */
賦值時函數(shù)func不帶括號,也不帶參數(shù),由于func代表函數(shù)的首地址,因此經(jīng)過賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。
所以 函數(shù)名代表函數(shù)的入口地址吧
是。在C語言中,一個函數(shù)的函數(shù)名其實(shí)就是一個地址,即該函數(shù)的入口地址。我們可以聲明一個函數(shù)指針,并將函數(shù)的入口地址(函數(shù)名)賦值給這個指針,然后使用這個指針來調(diào)用具體的函數(shù)。
要知道m(xù)ain函數(shù)也是由其他的程序調(diào)用的。
我們編寫的程序,最終是不存在所謂的函數(shù)名的,有的只有內(nèi)存單元地址0xffeedd00.
我們的程序執(zhí)行時,程序加載到內(nèi)存,比方說整個程序所占用的內(nèi)存范圍是0xffee0000 ~ 0xffeedd00,這么多。
假設(shè)程序有一個小函數(shù)fun(),那么它的范圍可能是0xffee0000~0xffee00ff。
那么函數(shù)fun()的入口地址是多少? 0xffee0000。。
那么函數(shù)名fun實(shí)際上就是0xffee0000的別稱。
你用一個指針指向這個函數(shù),那么你把 指針 = 函數(shù)名,實(shí)際就是把0xffee0000這個內(nèi)存單元的地址給指針p。
所以,結(jié)論是:
函數(shù)名 是 程序在執(zhí)行時, 函數(shù)所占內(nèi)存單元塊的 首地址 的別稱。
感覺你說的是 “指向函數(shù)的指針變量”
可以定義一個 函數(shù)指針變量,然后將一個函數(shù)名賦值給這個函數(shù)指針變量。
很多函數(shù) 是把一個函數(shù)指針 作為 參數(shù)來傳遞的。
舉例:
int c,d;
int (*p)(int a,int b); //聲明一個函數(shù)指針類型的變量,變量名為p,其類型是 int *(int a,int? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//b)
int func1( int a,int b);//聲明一個函數(shù)1
int func2(int f,int g);//聲明一個函數(shù)2
p=func1; //將一個函數(shù)名賦值給一個函數(shù)指針變量
c=(*P)(34,69); //使用指針調(diào)用函數(shù)fun1
p=func2;
d=(*p)(50,90); //使用函數(shù)指針 調(diào)用函數(shù)func2
其它細(xì)節(jié)這里就不詳細(xì)解答了,希望我的回答對你有點(diǎn)幫助,很高興和你一起討論和學(xué)習(xí)。