1. 程式人生 > >C語言中的函式指標

C語言中的函式指標

Q:函式指標是什麼意思?

A:例如一個指標指向int變數,那麼這個指標就是儲存這個int變數在記憶體中儲存的地址。同理,函式指標就是指向一個函式的指標,那麼這個指標就是儲存這個函式在記憶體中儲存的起始地址。

* 當我們宣告一個數據指標時,必須宣告它指向的這個資料的型別。同理在宣告一個函式指標時,也必須宣告它指向的函式型別。那麼我們這裡說的函式型別包括哪些?包括函式的返回型別以及函式的參量型別。

比如說我們寫的一個函式:void example( int  * ); 

這個函式example( ) 的型別就是:具有int * 型別的參量,返回型別是void的函式。

Q:怎麼宣告一個函式指標?(我們以上面這個函式型別為例,宣告一個指向這種函式型別的函式指標)

A:例如一個數據型別為int的變數,我們宣告指向這種型別變數的指標就應該為 int * p;同理,我們宣告一個指向“具有int * 型別的參量,返回型別是void的函式”的函式指標就應該是:void (* pf)(int *);

這裡的pf就是一個指向“具有int * 型別的參量,返回型別是void的函式”的函式指標。(* pf)就是一個函式。

所以以後如果我們想要宣告一個特定型別的函式指標,只需要在某種特定型別的函式,

如:char function(char * ,int); 將這裡的函式名function改為(*pf)即可:char (* pf)(char *, int)。

總結:宣告一個指向特定函式型別的指標,首先宣告一個該型別的函式,然後用(* pf)形式的表示式代替函式名稱即可;pf就成為可指向這種型別函式的指標了。。。。。就是這麼easy!

因為一個函式名就是這個函式的首地址。所以給一個函式指標賦值就是直接用一個和函式指標指向的相同型別的函式的函式名賦值就好了,例如上面說的函式指標為pf, pf = function;   // 這裡的function就是function()

函式的地址。

來看一個例子加深你的理解:

void show( void (*pf)(int *), char * str );

這個函式原型咋一看感覺很難,看完上面我說的就很easy了,那麼從上面這個函式原型我們可以得到哪些資訊呢?首先就是函式show()的返回型別為void,然後就是這個函式接受兩個參量pf和str,參量pf是一個函式指標,參量str是一個數據指標。更具體一點就是:pf指向接受一個int * 型別參量且返回型別為void的函式,str指向一個char型的值。函式就可以這樣呼叫:show( example,a );  // a為指向char型的指標;

So easy!!!!