C語言函式指標實驗

2021-09-06 14:33:54 字數 1461 閱讀 9113

上次看atmel的示例工程,發現人家使用了函式指標的結構體(函式指標結構體)。感嘆人家的c語言功夫審核,自己費勁還是只能讀懂的份。不過,函式指標確實好用。今天就試試這個超牛的東西。now let's see how function pointers can help us.

函式指標的宣告方法為:

函式型別 (標誌符指標變數名) (形參列表);

注1:「函式型別」說明函式的返回型別,「(標誌符指標變數名 )」中的括號不能省,若省略整體則成為乙個函式說明,說明了乙個返回的資料型別是指標的函式,後面的「形參列表」表示指標變數指向的函式所帶的引數列表。例如:

int func(int x); /* 宣告乙個函式 */

void (*f) (int x); /* 宣告乙個函式指標 */

f=func; /* 將func函式的首位址賦給指標f */

賦值時函式func不帶括號,也不帶引數,由於func代表函式的首位址,因此經過賦值以後,指標f就指向函式func(x)的**的首位址。

注2:函式括號中的形參可有可無,視情況而定

第二步,準備實驗環境。

mdk473+stm32f4.其實沒有必要在開發板中試,只是剛好我手上有這麼個開發環境,就不去配置別的東西了。

第三步,開始寫**:

1、寫兩個功能不同引數型別一樣的函式。

這裡我寫了兩個函式:

uint8_t max1(uint8_t x,uint8_t y)

uint8_t max2(uint8_t x,uint8_t y)

兩個函式一樣的功能。  

2、乙個函式指標,對映其中的乙個函式  看輸出。之後對映到第二個函式看輸出

實現步驟

int main(void

)}

之後但不跟蹤進去看看,會發現兩個max函式都執行了。

還有一種是將函式指標弄成乙個陣列的形式。陣列的成員都是函式指標。這種寫法特別適合做介面程式。比如我先前部落格裡邊提到的atmel的(函式指標結構體)。底層函式和上層函式分開來的效果,是當底層硬體改變之後,只寫相應的介面函式就可以掛在到原來的大程式中。比重新寫要簡單很多。

以下是函式指標陣列的實驗:

繼續使用上邊的兩個max函式。因為函式的返回型別是相同的,所以可以定義成陣列。定義的時候只需要注意書寫的格式就行了:

int main(void

)

執行下,可以看到兩個max依此都執行了。

其實函式名就是個指標,指向了函式的入口位址。函式的引數什麼的,是函式名後邊的一段空間,可以有也可以沒有。跟這個指標沒什麼必然聯絡。

C語言 指標函式和函式指標

指標函式和函式指標 指標函式其實是乙個簡稱,是指帶指標的函式,它本質上是乙個函式,只是返回的是某種型別的指標。其定義的格式為 型別識別符號 函式名 參數列 函式指標,從本質上說是乙個指標,只是它指向的不是一般的變數,而是乙個函式。因為每個函式都有乙個入口位址,函式指標指向的就是函式的入口位址。其定義...

C語言 指標函式和函式指標

1 指標函式是指帶指標的函式,本質上是乙個函式,函式返回值是某一型別的指標 定義 型別識別符號 函式名 參數列 int f int x,int y 它首先是乙個函式,只不過這個函式的返回值是乙個位址值,函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函...

c語言函式指標與指標函式

include include include using namespace std 1 c語言函式指標 解釋 這是一種很特殊的指標,它的指向是乙個函式的入口 作用 該指標可以接受乙個函式的位址,代表這個函式執行函式的操作 函式指標舉例 下面是乙個函式指標pfunc,它只能指向返回值為float,...