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
提交
取消