C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子

时间:2021-07-13 18:59:29

先来不带参数的回调函数例子


 

#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};