不带参数的回调函数例子
#include <iostream>
#include <windows.h>
void printFunc()
{
std::cout<<"printFunc"<<std::endl;
}
void CallFunc(void (*FuncPoint)())
{
FuncPoint();
}
int main(int argc,char* argv[])
{
CallFunc(printFunc);
system("pause");
return 0;
}
带参数的回调函数例子
#include <iostream>
#include <windows.h>
void printFunc(int a)
{
std::cout<<"printFunc : "<<a<<std::endl;
}
void CallFunc(void (*FuncPoint)(int),int a)
{
FuncPoint(a);
}
int main(int argc,char* argv[])
{
CallFunc(printFunc,123);
system("pause");
return 0;
}
函数指针数组的使用
#include <iostream>
#include <windows.h>
void printFunc1(int a)
{
std::cout<<"printFunc1 : "<<a<<std::endl;
}
void printFunc2(int a)
{
std::cout<<"printFunc2 : "<<a<<std::endl;
}
int main(int argc,char* argv[])
{
void (*funcPointArray[2])(int)={printFunc1,printFunc2};
for (int i=0;i<2;i++)
{
funcPointArray[i](3);
}
system("pause");
return 0;
}
使用typedef简化上面的代码
#include <iostream>
#include <windows.h>
typedef void (*FuncPoint)(int);
void printFunc1(int a)
{
std::cout<<"printFunc1 : "<<a<<std::endl;
}
void printFunc2(int a)
{
std::cout<<"printFunc2 : "<<a<<std::endl;
}
int main(int argc,char* argv[])
{
//void (*funcPointArray[2])(int)={printFunc1,printFunc2};
FuncPoint funcPointArray[]={printFunc1,printFunc2};
for (int i=0;i<2;i++)
{
funcPointArray[i](3);
}
system("pause");
return 0;
}
本来我们需要使用:
void (*funcPointArray[2])(int)
其中变量是
funcPointArray[2]
于是 在 TypeDef 里 我们用 FuncPoint 来代替这个变量,代替了上面整的一句话。
typedef void (*FuncPoint)(int);
后面使用的时候就用 FuncPoint
FuncPoint funcPointArray[]={printFunc1,printFunc2};