C C 函式指標的用法

2021-08-03 15:02:36 字數 3633 閱讀 3443

一 函式指標介紹

函式指標指向某種特定型別,函式的型別由其引數及返回型別共同決定,與函式名無關。舉例如下:

int add(int nleft,int nright);//函式定義  

該函式型別為int(int,int),要想宣告乙個指向該類函式的指標,只需用指標替換函式名即可

int (*pf)(int,int);//未初始化  

則pf可指向int(int,int)型別的函式。pf前面有*,說明pf是指標,右側是形參列表,表示pf指向的是函式,左側為int,說明pf指向的函式返回值為int。則pf可指向int(int,int)型別的函式。而add型別為int(int,int),則pf可指向add函式。

pf = add;//通過賦值使得函式指標指向某具體函式  

注意:*pf兩端的括號必不可少,否則若為如下定義:

int *pf(int,int);//此時pf是乙個返回值為int*的函式,而非函式指標  

二 標準c函式指標

1函式指標的定義

1.1 普通函式指標定義

int (*pf)(int,int);  

1.2 使用typedef定義函式指標型別

typedef int (*pf)(int,int);  

pf pf;//此時,為指向某種型別函式的函式指標型別,而不是具體指標,用它可定義具體指標

2函式指標的普通使用

pf = add;  

pf(100,100);//與其指向的函式用法無異  

(*pf)(100,100);//此處*pf兩端括號必不可少  

注意:add型別必須與pf可指向的函式型別完全匹配

3函式指標作為形參

//第二個形參為函式型別,會自動轉換為指向此類函式的指標  

void fuc(int nvalue,int pf(int,int));  

//等價的宣告,顯示的將形參定義為指向函式的指標  

void fuc(int nvalue,int (*pf)(int,int));  

void fuc(int nvalue,pf);  

形參中有函式指標的函式呼叫,以fuc為例:

pf = add;//pf是函式指標  

fuc(1,add);//add自動轉換為函式指標  

fuc(1,pf);  

4返回指向函式的指標

4.1 使用typedef定義的函式指標型別作為返回引數

pf fuc2(int);//pf為函式指標型別  

4.2 直接定義函式指標作為返回引數

int (*fuc2(int))(int,int);//顯示定義  

說明:按照有內向外的順序閱讀此宣告語句。fuc2有形參列表,則fuc2是乙個函式,其形參為fuc2(int),fuc2前面有*,所以fuc2返回乙個指標,指標本身也包含形參列表(int,int),因此指標指向函式,該函式的返回值為int.

總結:fuc2是乙個函式,形參為(int),返回乙個指向int(int,int)的函式指標。

二 c++函式指標

1由於c++完全相容c,則c中可用的函式指標用法皆可用於c++

2 c++其他函式(指標)定義方式及使用

2.1 typedef與decltype組合定義函式型別

typedef decltype(add) add2;  

decltype返回函式型別,add2是與add相同型別的函式,不同的是add2是型別,而非具體函式。

使用方法:

add2* pf;//pf指向add型別的函式指標,未初始化  

2.2 typedef與decltype組合定義函式指標型別

typedef decltype(add)* pf2;//pf2與1.1pf意義相同  

pf2 pf;// pf指向int(int,int)型別的函式指標,未初始化  

2.3 使用推斷型別關鍵字auto定義函式型別和函式指標

auto pf = add;//pf可認為是add的別名(個人理解)   

auto *pf = add;//pf為指向add的指標   

3函式指標形參

typedef decltype(add) add2;  

typedef decltype(add)* pf2;  

void fuc2 (add2 add);//函式型別形參,呼叫自動轉換為函式指標  

void fuc2 (pf2 add);//函式指標型別形參,傳入對應函式(指標)即可  

說明:不論形參宣告的是函式型別:void fuc2 (add2 add);還是函式指標型別void fuc2 (pf2 add);都可作為函式指標形參宣告,在引數傳入時,若傳入函式名,則將其自動轉換為函式指標。

4  返回指向函式的指標

4.1 使用auto關鍵字    ?

autofuc2(int)->int(*)(int,int)//fuc2返回函式指標為int(*)(int,int)

4.2 使用decltype關鍵字

decltype(add)* fuc2(int)//明確知道返回哪個函式,可用decltype關鍵字推斷其函式型別,  

5 成員函式指標

5.1普通成員函式指標使用舉例   

class a//定義類a  

public:  

void fuc()  

};  

typedef void(a::*pf1)();//指標名前需加上類名限定  

pf1 pf1 = &a::fuc; //必須有&  

(a.*pf1)();//使用成員函式指標呼叫函式  

5.2繼承中的函式指標使用舉例

class a  

void fuc2()  

};  

class b:public a  

};  

typedef void(a::*pf1)();  

typedef void(b::*pf2)();  

pf1 pf1 = &a::fuc;  

int main()           

6過載函式的指標

6.1 過載函式fuc

void fuc();  

void fuc(int);  

6.2 過載函式的函式指標

void (*pf)(int) = fuc;//pf指向fuc(int)  

int(*pf2)(int) = fuc;//錯誤沒有匹配的型別  

注意:編譯器通過指標型別決定選取那個函式,指標型別必須與過載函式中的乙個精確匹配。

c c 函式指標的用法

鏈結2 1.定義 每乙個函式都占用一段記憶體單元,它們有乙個起始位址,指向函式入口位址的指標稱為函式指標。2.語法 指向函式的指標變數的一般定義形式為 資料型別 指標變數名 參數列 3.說明 1 函式指標的定義形式中的資料型別是指函式的返回值的型別。2 區分下面兩個語句 int p int a,in...

C C 函式指標,指標函式的用法,用處

先看函式指標 int func2 int x 宣告乙個函式 int q2 int x 宣告乙個函式指標 q2 func2 將func函式的首位址賦給指標f int c q2 3 3可以為任意實參 上面4句基本說明了函式指標的用法 函式指標是指向函式的指標,確切的說,是指向特定型別函式的指標 函式與函...

C C 函式指標,指標函式的用法,用處

先看函式指標 int func2 int x 宣告乙個函式 int q2 int x 宣告乙個函式指標 q2 func2 將func函式的首位址賦給指標f int c q2 3 3可以為任意實參 上面4句基本說明了函式指標的用法 函式指標是指向函式的指標,確切的說,是指向特定型別函式的指標 函式與函...