指針是C語言的精髓,對於初學者來講,指針是C語言語法學習中比較難的知識點,而這裡面指向函數的指針更是不太容易理解。
下面給大家講下怎樣學習理解C語言中指向函數的指針及編程方法和使用例子。
注意:這是一篇關於C語言編程的基礎語法內容,C語言大神請繞過。
基本概念
首先,先不要把指向函數的指針認為太難了,它和普通的指針區別也不是太大,只是定義形式上有所區別。
比如,對於一個指向整形的普通指針,定義形式如下:
int *p;
在定義中,指針變量的名稱是p,符號「*」說明了p是一個指針,int說明這個指針指向的是整形變量。
那麼,如果我們定義一個指向函數的指針,假設變量名稱為p,比如它指向這樣的一個函數,這個函數需要兩個整形參數,其返回值也是整形參數,其定義如下:
int (*p)(int, int);
對這個定義分解一下,其中,p是變量的名稱,符號「*」說明了p是一個指針,由於這個指針指向的是一個函數,所以在定義中必須體現函數的輸入輸出參數信息,那麼最前面的int指的就是函數的返回值為int類型,後面的(int, int)則定義了該函數需要兩個整形的輸入參數。另外,必須將「*」與「p」必須用括號寫成(*p)的形式,否則,由於括號的優先級大於*的優先級,去掉括號的話就成為另外一種意思了。
這樣對比著理解,指向函數的指針似乎與普通指針區別也不是太大。
指向函數的指針編程例子
下面通過一個例子演示指向函數的指針的使用方法。
該例子的功能是,對於一個輸入的一維數組,定義三個函數findMax、findMin和getAvg,分別實現查找該數組的最大值、最小值及計算該數組的平均值,這三個函數的輸入輸出參數完全相同。定義一個fun函數,在該函數的參數中,需要一個指針變量作參數,這個指針能夠指向上面的三個函數。在主程序中,調用fun函數,根據傳入不同的p值實現對輸入的一維數組作不同的處理功能。
下面先看下幾部分的實現代碼吧。
1、findMax、findMin和getAvg代碼實現
這三個函數對一維數組x,分別作求最大值、最小值及平均值的處理,並將其結果返回。C語言代碼如下:
這三個函數比較簡單,函數原型完全一樣,輸入參數為一個指向double的指針x及x的元素個數n,輸出參數也就是返回值是一個double型的數值。
2、fun函數的代碼實現
該函數輸入參數為3個,前兩個為指向double的指針x及x的元素個數n,第三個為一個指向函數的指針類型,這個指針能夠指向上面的三個函數。C語言代碼如下:
那麼,在主程序中可以調用該函數,只要輸入不同的p值,就可以對輸入的一維數組作不同的處理運算。
3、主程序測試代碼
主程序C語言測試代碼如下:
第43-44行定義了一個包含5個元素的一維數組x及存儲數據處理結果的變量max、min及avg。
第46-48行,調用fun函數,將函數findMax、findMin和getAvg的名稱作為參數傳入到該函數中,在控制臺上輸出其處理運算結果。
其運行界面如下圖所示:
可見,在這個例子中已經成功的使用了指向函數的指針作為參數,並得到了正確的運行結果。
總結
指向函數的指針,理解其定義形式,掌握其基本用法,似乎也不是太難了。