OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4965|回复: 7

这个函数指针的参数是从哪里得到的

[复制链接]

50

主题

94

帖子

0

精华

高级会员

Rank: 4

积分
556
金钱
556
注册时间
2020-3-6
在线时间
77 小时
发表于 2022-5-18 15:59:41 | 显示全部楼层 |阅读模式
1金钱
做STM32F429网络实验的时候,在tcppcb创建成功后会连接到目的地址的指定端口上,然后通过函数指针调用一个回调函数tcp_client_connected(),可是这函数是有三个参数的,调用的时候并没有进行参数传递,那么参数值是从哪里得到的呢?
q1.png
这是函数定义
q2.png
这是函数调用的地方,看了半天也没搞明白参数是从哪里传递的,tcp_connect()函数中也没找到相关语句,谁能帮忙解释一下,谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

452

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4292
金钱
4292
注册时间
2018-5-14
在线时间
928 小时
发表于 2022-5-18 16:39:58 | 显示全部楼层
好好复习c语言,这个传递的是函数指针,比如function函数的地址是0x0800AADE,假设在库中有一个函数指针runfunction保存了这个地址,那么库中就会出现runfunction(参数1,参数2...)的调用方法,他实际调用的就是function
回复

使用道具 举报

50

主题

94

帖子

0

精华

高级会员

Rank: 4

积分
556
金钱
556
注册时间
2020-3-6
在线时间
77 小时
 楼主| 发表于 2022-5-19 09:32:05 | 显示全部楼层
姚先起 发表于 2022-5-18 16:39
好好复习c语言,这个传递的是函数指针,比如function函数的地址是0x0800AADE,假设在库中有一个函数指针run ...

你似乎没明白我的意思,我知道这是函数指针调用,传递的是函数地址,我的问题是,这个函数是一个带参函数,即使是以函数指针形式调用也应该带上参数吧,或者是在主调函数里有同名变量才行吧?可是我并没有找到
回复

使用道具 举报

3

主题

117

帖子

0

精华

高级会员

Rank: 4

积分
559
金钱
559
注册时间
2018-10-3
在线时间
107 小时
发表于 2022-5-19 09:39:15 | 显示全部楼层
jeff001101 发表于 2022-5-19 09:32
你似乎没明白我的意思,我知道这是函数指针调用,传递的是函数地址,我的问题是,这个函数是一个带参函数 ...

我觉得你还是听楼上的吧。好好复习C语言,可能你知道有函数指针这个东西,但是并不懂这个东西怎么用。 在看你的问题,tcp_client_connected这个就是个回调函数。 参数什么的都在tcp_connect里处理了,里面有个指针指向了tcp_client_connected这个函数。 所有的传参都由这个指针去处理了。
回复

使用道具 举报

2

主题

452

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4292
金钱
4292
注册时间
2018-5-14
在线时间
928 小时
发表于 2022-5-19 09:46:33 | 显示全部楼层
jeff001101 发表于 2022-5-19 09:32
你似乎没明白我的意思,我知道这是函数指针调用,传递的是函数地址,我的问题是,这个函数是一个带参函数 ...

参数是库给的,不是你给的,你只是提供库一个方法,这个方法就是这个函数。
回复

使用道具 举报

50

主题

94

帖子

0

精华

高级会员

Rank: 4

积分
556
金钱
556
注册时间
2020-3-6
在线时间
77 小时
 楼主| 发表于 2022-5-19 11:14:19 | 显示全部楼层
wklhwkl 发表于 2022-5-19 09:39
我觉得你还是听楼上的吧。好好复习C语言,可能你知道有函数指针这个东西,但是并不懂这个东西怎么用。 在 ...

这方面能力确实还需要加强,其实我也明白参数应该是在tcp_connect里面处理了,不然不可能正常运行的,只是看了几遍tcp_connect函数只看到指向tcp_client_connected的指针,却没有看到处理相关参数的语句,所以才有此疑问,我再仔细看看吧,谢谢指点!
回复

使用道具 举报

50

主题

94

帖子

0

精华

高级会员

Rank: 4

积分
556
金钱
556
注册时间
2020-3-6
在线时间
77 小时
 楼主| 发表于 2022-5-19 11:28:25 | 显示全部楼层
姚先起 发表于 2022-5-19 09:46
参数是库给的,不是你给的,你只是提供库一个方法,这个方法就是这个函数。

好的,谢谢指点!其实功能用起来都正常,也明白参数肯定是在库函数里处理了,不过就是在tcp_connect这个库函数里来回搜了几遍都没有看到和处理参数有关的语句,找不到源头心里总感觉不爽,我再仔细找找
回复

使用道具 举报

2

主题

452

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4292
金钱
4292
注册时间
2018-5-14
在线时间
928 小时
发表于 2022-5-19 16:33:34 | 显示全部楼层
jeff001101 发表于 2022-5-19 11:28
好的,谢谢指点!其实功能用起来都正常,也明白参数肯定是在库函数里处理了,不过就是在tcp_connect这个 ...

那不简单,找到你这个函数指针赋值给了库中的哪个变量呗,然后全局查找这个变量,始终都会有一处或者多处出现

变量(参数,参数,...);

这个就是库在调用你提供的函数了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 18:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表