/*
首先要先理解两个类型的区别。
先说函数指针:
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");
}