c 函式指標

2021-07-25 16:44:59 字數 1875 閱讀 6848

在c++中,  函式指標雖然並不常用, 但還是非常有必要了解的

1.函式指標和其他指標一樣, 指向某種特定型別. 函式指標的型別由它的返回型別和形參型別共同決定, 與函式名無關, 例如:

bool lengthcompare(const string&, const string&);

bool (*pf)(const string&, const string&); // 未初始化

2.把函式名作為乙個值使用時, 該函式自動地轉換成指標.例如

pf = lengthcompare;

pf = &lengthcompare;

3.函式指標作為形參的寫法

// 雖然第三個形參是函式型別, 但它會自動轉換成指向函式的指標

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&);

4.函式指標的型別別名

直接使用函式指標型別顯得冗長而繁瑣, 可以為它定義型別別名, 通常我們使用第三種寫法

// func和func2是函式型別			  

typedef bool func(const string&, const string&);

typedef decltype(lengthcompare) func2;

// funcp和funcp2是指向函式的指標

typedef bool(*funcp)(const string&, const string&);

typedef decltype(lengthcompare) *funcp2;

此時, usebigger可以重新宣告為

void usebigger(const string&, const string&, func);

void usebigger(const string&, const string&, funcp2)

5.不能返回乙個函式, 但是能返回指向函式的指標.必須注意的是, 與函式型別的形參不一樣, 我們必須把返回型別寫成指標形式, 編譯器不會自動地將函式返回型別當成對應的指標型別處理.

例如我們要定義乙個形參為乙個int, 返回乙個funcp型別的函式,**如下

funcp f1(int);   // 正確

func *f1(int); // 正確

func f1(int); // 錯誤

6.類的成員函式指標

必須注意的是,:

在定義類的成員函式指標時, 必須加上"類名::", 而呼叫類的非靜態函式時都有乙個隱含的this指標, 如果使用this呼叫, 則格式為(this->*pfunc)(實參列表),

或(該類物件指標->*pfunc)(實參列表)

假如ctest類有函式func1~func3和 invoke, invoke函式內部可能需要呼叫func1~func3中的其中乙個, 我們的**如下

class ctest

void func2()

void func3()

typedef void (ctest::*funcpointer)();

void invoke(funcpointer func)

};

C 指標函式和函式指標

1 指標函式 1 基本概念 指標函式 顧名思義就是帶有指標的函式,即其本質是乙個函式,只不過這種函式返回的是乙個對應型別的位址。2 定義式 type func type type 如 int max int x,int y 3 例子詳解 cpp view plain copy 1.include 2...

c 指標函式和函式指標

函式指標與指標函式 1 函式指標 形式 返回型別 函式名 參數列 一種特殊的指標,它指向函式的入口 定義乙個函式指標p,只能指向返回值為int,形參為兩個int的函式 輸出結果 include stdafx.h include using namespace std int p int,int in...

C 函式指標與指標函式

函式指標 函式名本身代表著函式的位址,因此給函數指標賦值使可以不用加 符號 加也可以!void func int 定義乙個函式 void pf int 定義乙個函式指標 pf func 給函式指標賦值 int f x,y 其中x,y是形式引數,f是函式名,呼叫後返回乙個指向整型資料的位址指標。f x...