1 、函数指针的定义
int (*fp)(int a);//定义了一个指向函数的指针
int *fp(int a);//错误,这是一个返回整形指针的函数了,而不是函数指针。
int
_tmain(
int
argc, _TCHAR* argv[])
{
//////////////////////////////////////////////////////////////////////////Example1
cout << FuncTestMethod <<endl;
//输出函数地址
int
(*fPtr)(
int
i);
//定义函数指针
fPtr = FuncTestMethod;
//;//将函数FuncTestMethod的地址赋给函数指针fPtr
cout << fPtr(5) <<
" | "
<< (*fPtr)(15) <<endl;
//上面的输出fp(5),这是标准c++的写法,(*fp)(15)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题!
//////////////////////////////////////////////////////////////////////////Example2
cout << FuncTestMethod <<endl;
//输出函数地址
typedef
int
(*fPtr)(
int
i);
//定义函数指针类型,类型名为fPtr。typedef定义可以简化函数指针的定义
fPtr f;
//这里利用自己定义的类型名fPtr定义了一个f的函数指针!
f = FuncTestMethod;
//;//将函数FuncTestMethod的地址赋给函数指针fPtr
cout << fPtr(5) <<
" | "
<< (*fPtr)(15) <<endl;
//上面的输出fp(5),这是标准c++的写法,(*fp)(15)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题!
return
0;
}
int
FuncTestMethod(
int
i)
{
return
i;
}
|
2、函数指针所指向的函数,必须为全局函数或类的静态函数
class
FuncPtr
{
typedef
int
(*func)(
void
);
public
:
void
FuncPtrTet(func func1)
{
(*func1)();
};
static
int
display(
void
)
{
cout <<
"display"
<<endl;
return
0;
}
};
|
int
display2(
void
)
{
cout <<
"display2"
<<endl;
return
2;
}
|
实现
int
_tmain(
int
argc, _TCHAR* argv[])
{
FuncPtr f;
f.FuncPtrTet(FuncPtr::display);
f.FuncPtrTet(display2);
return
0;
}
|
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/11/17/2252525.html,如需转载请自行联系原作者