为了账号安全,请及时绑定邮箱和手机立即绑定

如下在main文件中:我知道里面涉及了指针,但是里面究竟是如何执行的?

如下在main文件中:我知道里面涉及了指针,但是里面究竟是如何执行的?

大话西游666 2022-05-06 12:07:07
touch.h里面的程序:typedef struct{u8 (*init)(void); //初始化触摸屏控制器u8 (*scan)(u8); //扫描触摸屏.0,屏幕扫描;1,物理坐标;void (*adjust)(void); //触摸屏校准u16 x0; //原始坐标(第一次按下时的坐标)u16 y0;u16 x; //当前坐标(此次扫描时,触屏的坐标)u16 y;u8 sta; //笔的状态//b7:按下1/松开0;//b6:0,没有按键按下;1,有按键按下.}_m_tp_dev;extern _m_tp_dev tp_dev; //触屏控制器在touch.c里面定义u8 TP_Init(void);touch.c里面的程序:_m_tp_dev tp_dev={TP_Init,TP_Scan,TP_Adjust,0,0,0,0,0,};u8 TP_Init(void){······}在main文件中:tp_dev.init();我知道里面涉及了指针,但是里面究竟是如何执行的?使得 tp_dev.init();可以调用touch.c里面的u8 TP_Init(void)函数??大家帮帮忙,给指点一二。在此感谢了。
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

tp_dev是一个结构体,init、scan都是他的结构体成员,这几个成员的类型是函数指针,也就是说指向了一个函数,使用这个指针,就等于是函数调用。
所以当定义tp_dev的时候,init成员被你初始化为TP_Init, 也就是说tp_dev.init 就是指向了TP_Init()函数,所以你写tp_dev.init(); 就等于调用TP_Init
_m_tp_dev tp_dev=
{
TP_Init,
...
}

同样如果你tp_dev.scan(),就是调用TP_Scan

查看完整回答
反对 回复 2022-05-09
?
临摹微笑

TA贡献1982条经验 获得超2个赞

tp_dev为外结构体变量,当变量被引用时,它必须时一个已经赋值(初始化)的变量,所以tp_dev.scan(0)被引用时,调用的时初始化了的函数指针scan()所指向的函数TP_Scan()

查看完整回答
反对 回复 2022-05-09
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信