
正文
C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
先来不带参数的回调函数例子
#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};







