在C++中,我們常見到用類定義一個對象,這個對象可以有他自己的屬性(數據)和方法(函數),而在C語言的正常語法中,是禁止在結構體中定義函數的。
在一個關於觸摸屏的驅動程序中發現,用C語言的也可以實現對象的方法(函數)。
首先定義一個按鍵的結構體。
1、我們先來討論第二個函數指針void(*btn_command)(); 我們用該結構體定義的對象想要使用這個函數指針實現方法的效果之前,需要對這個指針賦予一個同類型的函數指針(無形參的函數指針)。例如
在這里函數的名字,即為指向該函數的指針。在使用此方法時,只需
我們又會想到,當我們需要的方法需要調用對象自身的屬性(數據)時,我們改如何操作呢?
接下來我們看第一個函數指針。
2、void (*draw_btn)(void * btn); 他同樣定義了一個函數指針,但他的入口參數需要一個任意類型的指針,我們在使用它時,需要用強制轉換類型操作,將其轉換為我們需要的指針類型(實參的指針類型)。這個方法在使用前,同樣需要將他賦值為一個同類型函數的函數指針(此處是形參為一個任意類型的指針)。例如
在下面的函數中,先將形參轉換為我們需要的指針類型(Touch_Button *),在轉入到一個同類型的指針中,就可以用同類型的指針調取該類型的屬性了。
使用時,只需要將我們需要的對象的地址傳入即可。如下,