C primer學習筆記 6 7函式指標

2021-08-01 06:16:04 字數 1717 閱讀 1165

【函式指標指向的是函式而非物件。和其他指標一樣,函式指標指向某種特定型別。函式的型別由它的返回型別和形參型別共同決定,與函式名無關。

bool lengthcompare(const string &, const string &); // 該函式的型別是bool(cosnt string &, const string &)

bool (*pf)(const string &, const string &); // (未初始化)要想宣告乙個可以指向該型別函式的指標,只需要用指標替換函式名即可

pf = lengthcompare;

pf = &lengthcompare; // 等價賦值,取位址符是可選的

我們還能直接使用指向函式的指標呼叫該函式,無須提前解引用指標(使用函式指標呼叫其指向的函式可以省略解引用符):
bool b1 = pf("hello", "goodbye");

bool b2 = (*pf)("hello", "goodbye"); // 可選的解引用符

bool b3 = lengthcompare("hello", "goodbye"); // 這三條語句呼叫了相同的函式

指向不同型別函式的指標間不存在轉換規則,我們可以為函式指標賦乙個nullptr 或者值為0 的整形常量表示式,表示該指標沒有指向任何乙個函式。】

過載函式的指標

當我們使用過載函式的指標時,上下文必須清晰地界定到底應該選用哪個函式;(比如不允許auto p = &func,如果func是過載函式的話)

編譯器通過指標型別決定選用哪個函式,指標型別必須與過載函式中的某乙個精確匹配。(故使用指標呼叫函式時不存在選擇的問題)】

函式指標形參

和陣列類似,雖然不能定義函式型別的形參,但是形參可以是指向函式的指標。此時,形參看起來是函式型別,實際上當成指標使用

void usebigger(const string &s1, const string &s2,

bool pf(const string &, const string &)); // 形參列表中的函式實際上是函式指標

void usebigger(const string &s1, const string &s2,

bool (*pf)(const string &, const string &)); // 兩條等價的宣告

返回指向函式的指標

返回型別不會自動轉換成指標,因此形式上不能定義成返回型別為函式的函式

auto f1(int) -> int (*)(int *, int); // 使用尾置返回型別的方式宣告函式

int (*f1(int))(int *, int);

pf f1(int); // 事先把pf 型別宣告為指向函式的指標

可以將auto,decltype,型別別名等方式用於簡化函式指標的宣告,形參中的函式指標,返回函式指標的函式宣告

使用decltype 作用於某個函式時,它返回函式型別而非指標型別。】

C Primer學習筆記(7)函式

1 函式呼叫做了兩件事情,用對應的實參初始化函式的形參,並將控制權轉交給被掉函式 主調函式的執行被掛起,被掉函式開始執行。2 函式體是乙個作用域。3 函式不能返回另乙個函式或者內建陣列型別,但是可以返回指向函式的指標或者指向陣列元素的指標。4 c 是一種靜態強型別語言,對於每一次的函式呼叫,編譯器都...

C Primer 學習筆記 函式(二)

include using std cout int compare int x,int p int main include include using namespace std void print1 int a,int n void print2 int beg,int end void p...

C Primer 學習筆記 函式(三)

返回陣列指標 type function parameter list dimension int func int i 10 func int i 是乙個帶引數i的函式func func int i 對函式的呼叫結果進行解引用,即呼叫結果是乙個指標 int func int i 10 此指標指向1...