(转)函数指针,指针函数,指向函数的指针,返回指针的函数
摘要:
在學(xué)習(xí)C語言時,一個比較容易混淆的概念就是函數(shù)指針、指針函數(shù)、返回值為指針的函數(shù)。本文將對這三個概念進(jìn)行區(qū)分。指針函數(shù)就是返回值為指針的函數(shù),兩個本質(zhì)上是同一事物,只是叫法不同。函數(shù)指針就是一個指向函數(shù)的指針,本質(zhì)上是一個指針,只是這個指針指向的對象是函數(shù),而不是一般意義上的存儲對象。
正文:
?
指針函數(shù)
指針函數(shù)就是返回指針值的函數(shù),本質(zhì)是一個函數(shù)。所以指針函數(shù)等價于“返回值為指針的函數(shù)”。
定義
指針函數(shù)的定義格式如下:函數(shù)類型 *函數(shù)名([參數(shù)列表])
當(dāng)然,也可以讓指針標(biāo)志*與函數(shù)類型緊貼在一起,與函數(shù)名分開,其含義一致,格式如下:函數(shù)類型* 函數(shù)名([參數(shù)列表])
相比上一種,這種方式更能表示這是一個指針函數(shù)。在將指針函數(shù)與函數(shù)指針區(qū)分時,也可以通過“指針標(biāo)志*能否和函數(shù)名分離”來判斷這個一個指針函數(shù),還是一個函數(shù)指針。
返回值問題
指針函數(shù)的使用和一般函數(shù)的使用相同,但需注意返回值問題。對于一個返回值為指針的函數(shù),不能返回auto型局部變量的地址,但可返回static型變量的地址。
這是因為auto型變量的生存周期很短,當(dāng)函數(shù)返回時,auto型變量的內(nèi)存空間將被釋放,如果返回值是auto型變量,那么這個返回指針將無效,變成野指針。而static類型變量占用的內(nèi)存空間則不會因為函數(shù)返回而被釋放,不會出現(xiàn)野指針問題。
所以編寫指針函數(shù)使要注意返回值。總體原則是:返回的指針對應(yīng)的內(nèi)存空間不會因函數(shù)返回則被釋放掉。常用的返回指針有以下幾種:
(1)??????函數(shù)中動態(tài)分配內(nèi)存空間(通過malloc等實現(xiàn))的首地址;
(2)??????靜態(tài)變量(static)或全局變量所對應(yīng)的變量的首地址;
(3)??????通過指針形參所獲得的實參的有效地址。
函數(shù)指針
函數(shù)指針就是一個指向函數(shù)的指針。每個函數(shù)在編譯時,會被分配一個入口地址,一般用函數(shù)名來表示,這個地址就是該函數(shù)的指針。
定義
函數(shù)指針的定義格式如下:函數(shù)類型 (*指針變量) ([參數(shù)列表])
在形式上,函數(shù)指針的特征是使用一個括號包裹指針標(biāo)志和指針變量,將括號移除,函數(shù)指針就變成指針函數(shù)。
之所以容易混淆指針函數(shù)和函數(shù)指針,是因為指針函數(shù)的形式如一般指針變量類型,如:int *x、int *y()、int(*z)()
這里x和z表示一個指針,而y則表示一個函數(shù),所以要注意區(qū)分指向變量的指針和指向函數(shù)的指針的形式區(qū)別。
賦值
函數(shù)指針的賦值操作:
使用函數(shù)名給指向函數(shù)的指針變量賦值。其賦值的一般格式如下:函數(shù)指針 = [ &] 函數(shù)名;
其中,函數(shù)名后不能帶括號和參數(shù),函數(shù)名前的&是可選,建議不要使用。
調(diào)用
函數(shù)指針調(diào)用格式:函數(shù)指針變量([實參列表]); 或?(*函數(shù)指針變量)([實參列表]);
推薦第二種用法。這種方法可以很好的表明這是一個函數(shù)。而第一種方法則很容易造成誤導(dǎo)。
之所以容忍一種調(diào)用方法是因為ANSI C 委員會決定容許這種普通函數(shù)調(diào)用句法。這是因為編譯器知道它是一個指向函數(shù)的指針,并且它還知道在該環(huán)境下所能做的惟一的一件事就是調(diào)用函數(shù),因此這里沒有任何模糊不清的表達(dá)。
使用場景
函數(shù)指針的常見用途就是把函數(shù)指針作為參數(shù)傳遞給函數(shù)。
一個函數(shù)通過由運行時決定的指針來調(diào)用另一個函數(shù)的行為叫做回調(diào)(callback)。用戶將一個函數(shù)指針作為參數(shù)傳遞給其它函數(shù),后者將“回調(diào)”用戶的函數(shù)。這樣就可實現(xiàn)通過同一接口實現(xiàn)對不同類型數(shù)據(jù)、不同功能的處理。
?
轉(zhuǎn)自:https://blog.csdn.net/wangxufa/article/details/72935091
轉(zhuǎn)載于:https://www.cnblogs.com/heluan/p/9580991.html
總結(jié)
以上是生活随笔為你收集整理的(转)函数指针,指针函数,指向函数的指针,返回指针的函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用CSS实现文本省略效果
- 下一篇: 【一步一步学习spring】spring