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


 


 

你可能感兴趣的:(c/c++)