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