OpenEdv-开源电子网

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

请教原子哥:在一个结构体中包含函数指针有什么作用吗?

[复制链接]

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2016-1-5 09:09:21 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 liuchang 于 2016-1-5 09:17 编辑

小弟最近在看lwip,其中netif结构体中包含几个函数指针
[mw_shl_code=c,true]struct netif {
  struct netif *next;
  ip_addr_t ip_addr;
  ip_addr_t netmask;
  ip_addr_t gw;
  netif_input_fn input;
  netif_output_fn output;[/mw_shl_code]
小弟想请问大神,这有什么作用?按照小弟的理解,在结构体中放入变量,指针,可以理解为成员的属性,可是如果放入函数指针,它有什么作用,还是某种约定?
而且,还需要在结构体外完成这个函数类型的定义,初始化,有什么必要呢?恳请大神指教~


最佳答案

查看完整内容[请看2#楼]

这几个确实是函数指针。以后在具体硬件平台上,会被初始化成不同的函数。比如在stm32f107上用的就是st的库函数,而在stm32f103+enc28j60时,初始化成enc28j60的驱动函数。trochili rtos上用的是stm32f107, st的dma方式的库函数。
电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

248

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
463
金钱
463
注册时间
2011-2-11
在线时间
12 小时
发表于 2016-1-5 09:09:22 | 显示全部楼层
这几个确实是函数指针。以后在具体硬件平台上,会被初始化成不同的函数。比如在stm32f107上用的就是st的库函数,而在stm32f103+enc28j60时,初始化成enc28j60的驱动函数。trochili rtos上用的是stm32f107, st的dma方式的库函数。
Openedv大力支持的开源RTOS  --Trochili RTOS(飞鸟)
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12989
金钱
12989
注册时间
2012-11-26
在线时间
3789 小时
发表于 2016-1-5 09:12:52 | 显示全部楼层
那个不是函数体指针,是结构体指针,按照代码来看,是指向下一个netif
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2016-1-5 09:18:23 | 显示全部楼层
jermy_z 发表于 2016-1-5 09:12
那个不是函数体指针,是结构体指针,按照代码来看,是指向下一个netif

这里的input,output不是函数指针吗?恳请大神指教
电子爱好者
回复

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-12-31
在线时间
15 小时
发表于 2016-1-5 16:41:51 | 显示全部楼层
trochili 发表于 2016-1-5 09:27
这几个确实是函数指针。以后在具体硬件平台上,会被初始化成不同的函数。比如在stm32f107上用的就是st的库 ...

有点深奥,我也看过例程,没看懂。
回复

使用道具 举报

38

主题

248

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
463
金钱
463
注册时间
2011-2-11
在线时间
12 小时
发表于 2016-1-5 22:10:40 | 显示全部楼层
vwv 发表于 2016-1-5 16:41
有点深奥,我也看过例程,没看懂。

那个结构体就是不同硬件平台和lwip协议栈的接口。包括各种配置和操作函数。
Openedv大力支持的开源RTOS  --Trochili RTOS(飞鸟)
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-1-6 15:14:23 来自手机 | 显示全部楼层
为了实现面向对象吧,可以认为它是“方法”或“事件”,而普通的结构体成员则是属性
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2014-7-31
在线时间
7 小时
发表于 2016-1-6 16:25:33 | 显示全部楼层
查一下链表
回复

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2016-1-6 16:30:41 | 显示全部楼层
作用很大啊,第一个参数为相同的结构体指针,为了指向下一个ip,寻找到下一个ip的相关数据(这些数据对应各个函数),构成一个链表
我的博客:http://blog.csdn.net/itdo_just
回复

使用道具 举报

3

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
538
金钱
538
注册时间
2012-7-19
在线时间
63 小时
发表于 2016-1-6 22:18:44 来自手机 | 显示全部楼层
你要明白netif是什么就知道怎么回事了,netif相当于一个抽象的网卡,它是和网卡一一对应的
回复

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-12-31
在线时间
15 小时
发表于 2016-1-7 08:27:23 | 显示全部楼层
trochili 发表于 2016-1-5 22:10
那个结构体就是不同硬件平台和lwip协议栈的接口。包括各种配置和操作函数。

明白了,原来如此
回复

使用道具 举报

8

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-9
在线时间
41 小时
发表于 2016-1-7 09:39:30 | 显示全部楼层
为什么我在论坛不能单独发帖问问题,要多久才可以!
回复

使用道具 举报

22

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2014-7-7
在线时间
311 小时
发表于 2016-1-8 11:06:10 | 显示全部楼层
不是函数指针,从语法上讲,这个是结构体指针,之所以这样定义,是想随意产生多个netif接口
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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