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
临摹微笑
TA贡献1982条经验 获得超2个赞
tp_dev为外结构体变量,当变量被引用时,它必须时一个已经赋值(初始化)的变量,所以tp_dev.scan(0)被引用时,调用的时初始化了的函数指针scan()所指向的函数TP_Scan()
添加回答
举报
0/150
提交
取消