C语言的函数指针
有人说 自己已经「学完C语言」 我就顺手写了一个东西 问他什么意思 明显嘛 看不懂
东西是这个 比我当时写的又加了一个括号 注意这个是可以编译通过的
1 | int (*a[1])(void (*a[2])(int (*a)[3])); |
我来简单解释一下 顺便传授一下方法
首先 这个是C语言里面定义函数指针的语法 难点是 因为函数有参数 而参数的类型也必须写在里面 所以会非常长 道行浅的「学完C语言」的人基本上是看不出来的 其实很简单 首先抓住主要矛盾 这个是什么 从前往后 从外往里找最合法的部分 发现是这个
1 | int (*a[1])(...) |
去掉[1]
就是函数指针 这里加上[1]
是函数指针的数组 所以 变量a是有一个元素的函数指针的数组 每个元素都是一个函数指针 这个函数的返回值是int
再看里面 也是一个函数指针的数组 这个是作为参数的
1 | void (*a[2])(int (*a)[3]) |
类似的 这是有两个元素的函数指针的数组 每个元素都是一个函数指针 函数指针指向的函数的返回值是void 接受一个参数 这个参数是一个指向了有3个元素的数组 数组的类型是int