函式指標 - OpenHome.cc

文章推薦指數: 80 %
投票人數:10人

在參數的型態宣告複雜時,雖然不能使用 auto , decltype 的運用可以稍微緩解一下型態宣告的負擔。

也可以宣告函式指標陣列,例如: bool (*compare[10])( ... 回C++目錄 程式在執行時,函式在記憶體中也佔有一個空間,將函式名稱作為指定來源時,函式名稱會自動轉為指標,型態由傳回值型態與參數列決定,若要將之指定給另一函式指標,型態的宣告方式如下: 傳回值型態(*名稱)(參數列); 函式指標代表著一個函式,相同型態的函式可以指定給具有相同型態的指標,例如: #include usingnamespacestd; intfoo(int); intmain(){ int(*fp)(int)=foo; foo(10);//顯示10 fp(20);//顯示20 return0; } intfoo(intn){ cout< usingnamespacestd; voidfoo(int); intfoo(int,int); intmain(){ void(*fp)(int)=foo; int(*add)(int,int)=foo; foo(10);//顯示10 cout< usingnamespacestd; voidsort(int*,int,bool(*compare)(int,int)); boolascending(int,int); booldescending(int,int); intmain(){ intnumber[]={3,5,1,6,9}; sort(number,5,ascending); //顯示13569 for(auton:number){ cout<b; } 在這個例子中,sort上的函式指標宣告有些難以閱讀,可以使用typedef,定義一個比較容易閱讀的名稱,例如: #include usingnamespacestd; typedefbool(*CMP)(int,int); voidsort(int*,int,CMP); ...略 voidsort(int*arr,intlength,CMPcompare){ for(intflag=1,i=0;i usingnamespacestd; boolcmp(int,int); voidsort(int*,int,decltype(cmp)); boolascending(int,int); booldescending(int,int); ...略 voidsort(int*arr,intlength,decltype(cmp)compare){ for(intflag=1,i=0;i usingnamespacestd; intfoo(int); intmain(){ int(&fr)(int)=foo; foo(10);//顯示10 fr(20);//顯示20 return0; } intfoo(intn){ cout< usingnamespacestd; voidsort(int*,int,bool(&compare)(int,int)); boolascending(int,int); booldescending(int,int); intmain(){ intnumber[]={3,5,1,6,9}; sort(number,5,ascending); //顯示13569 for(auton:number){ cout< #include usingnamespacestd; voidsort(int*,int,function); boolascending(int,int); booldescending(int,int); intmain(){ intnumber[]={3,5,1,6,9}; sort(number,5,ascending); //顯示13569 for(auton:number){ cout<compare){ for(intflag=1,i=0;i



請為這篇文章評分?