目录1.什么是函数指针变量2.函数指针的使用3.两个有趣又难懂的代码4.typedef关键字1.什么是函数指针变量整型指针存放int变量地址数组指针存放数组地址函数指针存放函数地址类比整形指针和数组指针我们应该知道函数指针变量是一个存放函数地址的指针通过这个地址我们可以间接的调用函数2.函数指针的使用语法格式指针指向函数的返回类型 *函数指针的变量名指向函数的参数类型和个数的交代如int *pint xint y这是一个名字为p的指针 指向一个返回类型为int 参数为两个整型的函数下面是通过函数指针调用函数的示例#includestdio.h int add(int a, int b) { int c a b; return c; } int main() { int (*p)(int x, int y)add; int x 10; int y 30; printf(%d\n,(*p)(x, y)); printf(%d\n,p(x, y)); //这里在使用函数指针的时候*p(x,y)可以简写成px,y) return 0; }输出结果3.两个有趣又难懂的代码给大家看两段有趣的代码(*(void(*)( ))0)( )解释①这段代码其实是一次函数的调用调用的是地址为0处的一个函数这个函数没有参数没有返回值②0本身是一个整型变量但是前面的void*将0强制类型转化成了函数指针类型也就是说这个被当作了这个函数的地址③最前面的*就是对0处地址的解引用即对函数的调用一句话调用地址0处的函数void*signal(int,void(*)(int))) (int)这段是一个函数声明,声明的函数名叫signal先看最外面的void*int这是函数的返回类型再看里面是函数的参数类型一个是整形int一个是函数指针void*int函数名signal参数int 函数指针void(*)(int)返回值void(*)(int)函数指针类型看完这两段代码是不是觉得特别的复杂那么有什么办法解决呢4.typedef关键字什么是typedef呢typedef是对类型进行重命名的关键字比如你想给无符号整形类型int换一个名字让它写起来更方便一点可以这样写typedef unsigned int uint那么unsigned int a就可以写成 uint a对于指针类型也是同理但是如果是数组指针和函数指针会稍有区别比如数组指针类型对int(*p)[5]重命名为patypedef int(*pa)[5]把(*)中的名字换成pa即可函数指针类型也是同理对int (*p)(int,int)重命名为paatypedef int (*paa)intint那么就可以用typedef关键字解决上面那两段代码复杂的问题了void*signal(int,void(*)(int))) (int)将void*int进行重命名typedef void*pint那么代码就可以写成p signalintp;这样看就简洁很多了另外typedef含有一个方便的用法,比如你想命名多个变量的时候int* p1p2这个时候的*只能给到p1p2是用不到*号的也就是p1是指针类型而p2是整型类型而使用typedeftypedef int * i*i* p1p2这个时候是可以直接定义两个指针变量的