C++函式指標、指標函式、返回值為函式指標的函式淺談
阿新 • • 發佈:2018-11-11
C++函式指標、指標函式、返回值為函式指標的函式淺談
引言
函式指標、指標函式是C中重要而容易混淆的概念,博主將通過兩個例項來說明這兩個截然不同的概念。
而返回值為函式指標的指標函式就更難理解了,放在文章的最後來介紹。
函式指標
函式指標是一種特殊的 指標,它指向函式的入口。
例如int (*add)(int, int);
定義了一個函式指標add,用於指向返回值為int,並且有兩個int引數的函式,下面用例項來說明
/** * 作者:lyn * 時間:2018.10.30 * 此程式用來演示函式指標 */ #include<iostream> using namespace std; int addfunc(int a, int b) { return a + b; } int main() { int (*add)(int, int) = addfunc; //兩種方法都可以 //int (*add)(int, int) = &addfunc; int result = (*add)(1, 2); //兩種方法都可以,建議使用第一種 //int result = add(1, 2); cout << "通過函式指標呼叫函式進行計算結果:" << result << endl; result = addfunc(1, 2); cout << "通過直接呼叫函式進行計算結果:" << result << endl; return 0; }
指標函式
指標函式是一種返回值為指標的 函式。
例如A *createA();
聲明瞭一個返回值為指向A型別的指標的,引數列表為空的函式(這句話讀起來可能有一··繞口),例項說明
/** * 作者:lyn * 時間:2018.10.30 * 該程式用來演示指標函式 */ #include<iostream> using namespace std; class A { public: A(int a) { this->a = a; } int getA(){ return a; } private: int a; }; //返回值為指向型別A的指標的函式 A *createA() { return new A(1); } int main(){ //建立一個指向A型別的指標,並呼叫createA建立一個A型別的物件 A* b = createA(); //通過指標呼叫類的方法 cout << "b->a = " << b->getA() << endl; return 0; }
返回值為函式指標的函式
其實在搞懂了函式指標和指標函式後,這個概念並不難懂,其實這就是一個複雜一點的指標函式,因為他的返回值為函式指標。
先給一個例子:
/*
*本例是SGISTL原始碼中的一個函式,比普通的返回值為函式指標的函式要更復雜一點
*因為本例中函式的引數也是一個函式指標
*/
void (* set_malloc_handler(void (*f)()))()
我們把例子從裡往外看
void (*f)()
是一個函式指標,它用於指向一個返回值為void,無引數列表的函式
* set_malloc_handler(void (*f)())
這是一個指標函式,返回值為指標,它有一個引數,引數為一個函式指標(返回值為void,無引數列表的函式)
void (* set_malloc_handler(void (*f)()))()