返回函數的指針, 參數爲函數指針。。。。。

C++通過引用傳遞數組

 

數組形參可以聲明爲數組的引用。如果形參是數組的引用,編譯器不會將數組實參轉化爲指針,而是傳遞數組的引用本身。

在這種情況下,數組大小成爲形參和實參類型的一部分(實參長度與形參長度不同時,編譯報錯)。

 

void printValue(int (&a)[5]){...}

 

int main(){ 

int i=0; 

int j[2]={0,1}; 

int k[5]={0,1,2,3,4}; 

 

printValue(i);//編譯報錯

printValue(j); //編譯報錯

printValue(k); //編譯OK 

return 0; 

}

 

 

 

C++多維數組的傳遞

C++中沒有多維數組,多維數組實際是數組的數組。傳參時,形參除了第一維以外的所有維的長度都是元素類型的一部分,必須明確指定。

 

void printValue(int (*a)[5], int row_size) {...}

 

int (*a)[5]:表示a是指向長度爲5的整型數組的指針。

括號是必須的,因爲: 
int (*a)[5]:表示a是指向長度爲5的整型數組的指針。

int *a[5]:表示a是長度爲5的數組,每個元素都是int*類型(a是指針的數組)。

 

C++指向函數的指針

函數指針指向一個函數,函數指針也有特定的類型,這個類型由函數的返回值類型和形參表確定,與函數名無關。

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

 

這個語句將pf聲明爲一個指向函數的指針,它所指向的函數帶有兩個const string &類型的參數,返回值爲bool類型。

 

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

 

該語句表示cmpFunc是一種指向函數的指針類型的名字(!類型名)。

cmpFunc f1 = my_func;

 

函數指針只能用同類型的函數或函數指針、或0值敞亮表達式來初始化或賦值。

 

返回指向函數的指針

函數可以返回一個函數指針。

double (*ff(int))(char*,long);

 

ff是一個函數,ff的參數是int類型,ff的返回值是一個函數指針,這個函數指針類型(形參表爲char*,long,返回值類型爲double)如下:

double (*)(char*,long);

 

 

在使用函數指針時,可以通過函數指針或者接引用的函數指針調用函數。

例如:

pf(“aa”,”bb”); 

(*pf)(“aa”,”bb”);

 

 

函數指針作爲形參時,可以是函數指針。

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

void f1(cmpFunc); //OK




轉載:http://www.cnblogs.com/apprentice89/p/3157441.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章