c 中指向函式的指標

2021-08-03 02:49:54 字數 1572 閱讀 2454

函式指標是指指向函式而非指向物件的指標。像其他指標一樣,函式指標也指向某個特定的型別。函式型別由其返回型別以及形參表確定,而與函式名無關。

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

這個語句將pi申明為指向函式的指標,它所指向的函式帶有兩個const string& 型別的形參和int型別的返回值。

*pi兩側的園括號是必須的:

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

這個語句宣告了乙個名為pi的返回值為bool*的函式。

函式指標型別相當的冗長。使用typedef定義可以簡化。

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

該定義表示pfunc是一種指向函式的指標型別的名字。該指標型別為「指向返回bool型別並帶有兩個const string引用形參的函式的指標」。在要使用這種函式指標型別時,只需要直接使用cmpfcn即可,不必每次都把整個型別宣告全部寫出來。

在引用函式名但又沒有呼叫該函式時,函式名將會被自動解釋為指向函式的指標。假設有函式:

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

除了作函式呼叫的左運算元以外,對lengthcompare的所有操作將會被解釋為如下型別的指標:

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

可以用函式名對函式指標做初始化或者賦值:

pfunc p1=0;

pfunc p2=lengthcompare;

此時直接使用函式名等於在函式名上做取位址操作。

lengthcompare等於&lengthcompare

pfunc pf=lengthcompare;

pf("hi","bbbbb");

或者(*pf)("hi","dfadsad");

函式的引數是指向函式的指標,可以使用下面的方式來宣告

void getcount(int cc,bool(string&,string&));

void getcount(int cc,bool (*)(string&,string&));

void getcount(int cc,bool (*pf)(string&,string&));

寫函式的時候應該如下寫

void getcount(int cc,bool (*p)(string&,string&))

c++允許使用函式指標指向過載函式:

指標的型別必須與過載函式的乙個版本精確匹配,如果沒有精確匹配的函式,則對該指標的賦值將導致編譯錯誤。

extern void ff(vector)

extern void ff(unsigned int)

void (*pf)(unsigned int)=&ff;          //ok,第二個

void (*pf1)(int) =&ff;                      //error,沒有精確匹配

double (*pf2)(vector)=&ff;              //error,返回型別不匹配

對C 中指向函式的指標的認識

指標不僅可以指向資料,還可以指向函式。資料在程式中要有記憶體位址進行儲存,同樣,函式 也需要占用記憶體空間進行儲存。資料型別函式名 形參列表 其實也就是 資料型別函式 首位址 形參列表 那麼指標就可以指向乙個函式了,指向函式的指標也叫做函式指標。函式指標的宣告方式 資料型別 函式指標名 形參列表 函...

C C 語言中指向函式的指標

在c語言中,函式本身不是變數,但可以定義指向函式的指標,這種指標可以被賦值 存放於陣列之中,傳遞給函式及作為函式的返回值等 the c programming language second edition 下面給出幾個簡單的例子來說明指向函式的指標。第乙個例子說明指向函式的指標如何說明 賦值 呼叫...

C C 語言中指向函式的指標

在c語言中,函式本身不是變數,但可以定義指向函式的指標,這種指標可以被賦值 存放於陣列之中,傳遞給函式及作為函式的返回值等 the c programming language second edition 下面給出幾個簡單的例子來說明指向函式的指標。第乙個例子說明指向函式的指標如何說明 賦值 呼叫...