當前位置:
首頁 > 知識 > c加加教程之c加加函數指針詳解

c加加教程之c加加函數指針詳解

在c/c++的學習過程中,數據指針是最常用的方法,在學習過程中也較容易理解,什麼是函數指針?即是運行時動態調用,比如回調函數 CallBack Function。

第一步,先做函數指針的初始化。

想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙

intCompareString(const string& str1, const string& str2)

{

return str1.compare(str2);

}

函數的初始化有兩種方式:

第一種,也是最普遍的方式:

int(*CompareFunction)(const string&, const string&) = CompareString;

第二種,是使用typedef定義函數類型,這種寫法有助於對代碼的理解:

typedef int(*CompareFunctionType)(const string&, const string&);

CompareFunctionTypeCompareFunction = CompareString;

第二步,函數指針賦值。

函數名可以理解為該類型函數的指針。當然,取地址操作符作用於函數名上也能產生指向該類型函數的指針。也就是說下面兩種賦值都是可行的:

CompareFunctionTypeCompareFunction = CompareString;

第三步,函數調用。

無論是用函數名調用,還是用函數指針調用,還是用顯式的指針符號調用,其寫法是一樣的:

CompareString("abc","cba");

CompareFunction("abc","cba");

第四步,函數指針的數組。

對於函數指針的數組,強烈建議使用typedef方式定義類型之後再使用,不然影響代碼的閱讀性,繼續以以上例子為例:

//withouttypedef

int(*CompareFunctionArray[3])(const string&, const string&);

//with typedef

CompareFunctionTypeCompareFunctionTypeArray[3];

第五步,函數指針用做函數返回值的類型。

到這一步,會發現typedef是多麼的好用了。不然我是完全讀不懂下面語句的意思的:

//withouttypedef

int (*func(int*,int))(const string&, const string&);

上面的聲明,將func(int*, int)聲明為一個函數,返回值為函數指針,函數類型為int (*)(const string&, const string&)。

多麼的晦澀啊!

如果寫成typedef就不用這麼糾結了,足見typedef的作用:

CompareFunctionTypefunc(int*, int);

第六步,指向extern "C"函數的指針。

《C++ primer 3》中有指出,指向C函數的指針和指向C++函數的指針類型不同,但是現在的很多編譯器都有語言擴展,認為這兩種函數的指針具有相同的特性。

想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙

函數聲明如下:

extern"C" int InsideFunctionC(const string& str1, const string&str2)

{

return str1.compare(str2);

}

intInsideFunctionCPlusPlus(const string& str1, const string& str2)

{

return str1.compare(str2);

}

函數指針的初始化和調用,允許賦值為指向C函數的指針:

int(*CompareFunction)(const string&, const string&) = InsideFunctionC;

另外還有一點,當extern"C"應用在一個聲明上時,所有被它聲明的函數都將受到影響。舉個例子:

extern"C" void OutSideFunction(int (*fc)(const string&, conststring&))

{

cout

}

int main()

{

OutSideFunction(InsideFunctionC);

OutSideFunction(InsideFunctionCPlusPlus);

return 0;

}

想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 C加加 的精彩文章:

可以跳過C語言直接學習C加加?
3分鐘帶你讀懂C語言和C加加學習路線
C加加構造函數Constructor
如何避免C語言初學者少走彎路
在哪些領域,C加加相對於其他編程語言有著根本性的優勢?

TAG:C加加 |

您可能感興趣

無處不在的加加林:俄羅斯有個加加林市,還有加加林街
緊急通知!今天起,無錫將開啟高溫40天加加加加加長模式!
C語言C加加編程快速入門系列
加加加加班的深夜,需要來個超燃battle幫你回回回回血!
C語言/C加加編程嵌入式基礎學習之volatile關鍵字
Opera計劃在其桌面瀏覽器中添加加密貨幣錢包
永遠的英雄——加加林
加加林冒死升空前夕,蘇聯火箭竟「不肯回家」?加加林死亡陰謀論
三所俄羅斯大學將增加加密貨幣課程和學位
有哪些適合新手練手的C/C加加項目
有事沒事,加加班再走
慵懶百搭針織衫,為女人味加分,你要加加分了!
加加林還未進入太空,蘇聯就做好了遇難聲明?加加林離奇的死因
C語言/C加加編程學習—坦克大戰小遊戲製作代碼
C加加 大神 John Carmack 的編程傳說
Opera瀏覽器為智能手機增加加密貨幣保護
加加食品引入東方資產實施債務重組
英國匯款服務平台TransferGo增加加密數字資產交易服務
輔食添加加胡蘿蔔,這幾個問題你需要注意下!
22款醬油對比測評:高檔貨加味精,海天、味事達、加加無一例外!