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

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)函数??
大家帮帮忙,给指点一二。在此感谢了。

大话西游666
浏览 154回答 2
2回答

有只小跳蛙

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

临摹微笑

tp_dev为外结构体变量,当变量被引用时,它必须时一个已经赋值(初始化)的变量,所以tp_dev.scan(0)被引用时,调用的时初始化了的函数指针scan()所指向的函数TP_Scan()
打开App,查看更多内容
随时随地看视频慕课网APP