日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C语言函数指针实验

發布時間:2023/12/31 综合教程 21 生活家
生活随笔 收集整理的這篇文章主要介紹了 C语言函数指针实验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上次看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)
{
    return x>y?x:y;
}
uint8_t max2(uint8_t x,uint8_t y)
{
    if(x>y)
        return x;
    else
        return y;
}

兩個函數一樣的功能。

2、一個函數指針,映射其中的一個函數 看輸出。之后映射到第二個函數看輸出

實現步驟

int main(void)
{    
    mymax = &max1;
    mymax(3,5);
    
    mymax = &max2;
    mymax(4,6);

  while (1)
  {
  }
}

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

還有一種是將函數指針弄成一個數組的形式。數組的成員都是函數指針。這種寫法特別適合做接口程序。比如我先前博客里邊提到的Atmel的(函數指針結構體)。底層函數和上層函數分開來的效果,是當底層硬件改變之后,只寫相應的接口函數就可以掛在到原來的大程序中。比重新寫要簡單很多。

以下是函數指針數組的實驗:

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

int main(void)
{
    uint8_t (*myFun[2])(uint8_t,uint8_t);
 myFun[0] = max1;
    myFun[1] = max2;
    
    myFun[0](2,4);
    myFun[1](5,2);
}

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

其實函數名就是個指針,指向了函數的入口地址。函數的參數什么的,是函數名后邊的一段空間,可以有也可以沒有。跟這個指針沒什么必然聯系。

總結

以上是生活随笔為你收集整理的C语言函数指针实验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。