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
合起来就是
-
定义了一个变量a
-
变量a是有一个元素的函数指针的数组
-
每个元素都是一个函数指针 这个函数的返回值是int
-
这个函数指针指向的函数接受一个参数
-
这个参数也是一个函数指针的数组 有两个元素
-
每个元素都是一个函数指针 函数指针指向的函数返回值是void 接受一个参数
-
这个参数是一个指向了又三个元素数组的数组指针 数组的类型是int
简化一下是 函数指针数组 函数的参数也是函数指针数组 内层的参数是数组指针
如果你觉得有问题 欢迎指正
或者您可以把评论发在别处,添加指向本页的连接,然后把网址告诉我:
本文标题:C语言的函数指针
文章作者:Chris
发布时间:2015-08-14
最后更新:2022-03-23
原始链接:https://chriszheng.science/2015/08/14/C-function-pointer/
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
分享