1、函數指針同樣是可以作為參數傳遞給函數的。
#include
#include
using
int
int
void
{
}
int
{
}
int
{
}
2、利用函數指針,我們可以構成指針數組,更明確點的說法是構成指向函數的指針數組,這么說可能就容易理解的多了。
#include
#include
using
void
void
void
void
{
}
另外:
void* a[]={t1,t2,t3};
cout<<"比較t1()的內存地址和數組a[0]所存儲的地址是否一致"<<t1<<"|"<<a[0]<<endl;
cout<<a[0]();
上面的這一小段中的錯誤行,為什么不能這么調用呢?指針數組元素所保存的只是一個內存地址,既然只是個內存地址就不可能進行a[0]()這樣地址帶括號的操作,而函數指針不同,它是一個例外,函數指針只所以這么叫它就是因為它是指向函數指向內存的代碼區的指針,它被系統授予允許與()括號操作的權利,進行間接的函數調用,既然函數指針允許這么操作,那么被定義成函數指針的數組就一定是可以一樣的操作的。
3、類的成員函數:
class CA
{
};
CA ca;
typedef char (CA::*PTRFUN)(int);
PTRFUN pFun;
void main()
{
}
在這里,指針的定義與使用都加上了“類限制”或“對象”,用來指明指針指向的函數是那個類的這里的類對象也可以是使用new得到的。比如:
CA *pca = new CA;
pca->(*pFun)(2);
delete pca;
而且這個類對象指針可以是類內部成員變量,你甚至可以使用this指針。比如:
類CA有成員變量PTRFUN m_pfun;
void CA::lcFun2()
{
}