c语言的函数指针和void *指向函数

/*

	首先要先理解两个类型的区别。

	先说函数指针:
		void (*fun)(void);    	这个就是一个函数指针了,函数的参数为空

		void (*fun)(int);		这个也是一个函数指针,函数参数有个int
	
	来看看void*类型:
		void *fun;				这样定义看起来很抽象,有没有,对于没有用过空类型的同学来说,
								这样定义确实会让人一脸懵逼。
								但是可千万别小看这个类型,这个类型可是C语言的精华所在啊,
								因为它可以代表任意数据类型,没错是任意数据类型,例如:
								int,float...这些基本数据类型就不用多说了,关键它还可以代表
								结构体,联合体,枚举,函数。是不是很牛逼啊。

	下面我主要介绍一下 函数指针 和 void指针指向函数

*/
	void *fun;			//空指针
	void (*fun_1)(void);//函数指针
	void (*fun_2)(int);//函数指针

	//-------------------------这里是空指针指向函数用法-------------------
	printf("这里是空指针指向函数用法\n");
	fun=test_func1;		//用空指针指向一个函数

	/*
		(unsigned int (*)(void))   这里是把这个空指针强制转换成函数指针
	*/
	(*  (unsigned int (*)(void))  fun)();	//运行该函数

	fun=test_func2;		//用空指针指向一个函数

	/*
		(unsigned int (*)(void))   这里是把这个空指针强制转换成函数指针
	*/
	(*  (unsigned int (*)(int))  fun)(100);	//运行该函数

	//-------------------------这里是函数指针指向函数用法-------------------
	printf("这里是函数指针指向函数用法\n");
	fun_1=test_func1;		//在这里,函数指针的类型必须和你指向函数的类型相同,类型相同主要针对参数

	(*fun_1)();		//运行该函数

	fun_2=test_func2;

	(*fun_2)(100);		//运行该函数
void test_func1()
{
	printf("函数1\n");
}
void test_func2(int v)
{
	printf("函数2\n");
}

猜你喜欢

转载自blog.csdn.net/HES_C/article/details/81944100