<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          函數(shù)指針作為結(jié)構(gòu)體成員

          共 1395字,需瀏覽 3分鐘

           ·

          2022-08-26 14:04

              關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容

          來(lái)源:嵌入式大雜燴




          函數(shù)指針在C語(yǔ)言中的意義


          在C語(yǔ)言程序中,數(shù)據(jù)結(jié)構(gòu)和算法是兩個(gè)基本的元素。C語(yǔ)言的基本數(shù)據(jù)類(lèi)型、結(jié)構(gòu)體、數(shù)組和聯(lián)合體是數(shù)據(jù)結(jié)構(gòu)的代表;C語(yǔ)言中的函數(shù)則是算法的代表。只有將數(shù)據(jù)結(jié)構(gòu)和算法有機(jī)結(jié)合才能構(gòu)成具有一定功能的程序。



          函數(shù)指針的應(yīng)用


          函數(shù)指針在嵌入式中的應(yīng)用非常廣泛,常常把函數(shù)指針作為結(jié)構(gòu)體的成員、作為函數(shù)的參數(shù)等。如在物聯(lián)網(wǎng)操作系統(tǒng)RT-Thread內(nèi)核源碼中,有如下代碼:

          1、函數(shù)指針作為結(jié)構(gòu)體成員


          2、函數(shù)指針作為函數(shù)的參數(shù)



          舉例說(shuō)明


          建立一個(gè)結(jié)構(gòu)體,用于四則運(yùn)算(根據(jù)函數(shù)指針的指向可以選擇加法運(yùn)算、減法運(yùn)算、乘法運(yùn)算、除法運(yùn)算),如

          typedef int (*fun_t)(intint);    

          // 包含了數(shù)據(jù)和算法的結(jié)構(gòu)體
          struct Source
          {

           int a;        // 數(shù)據(jù)a
           int b;        // 數(shù)據(jù)b
           fun_t operation;  // 算法operation
          };


          主函數(shù)內(nèi)可以進(jìn)行如下操作:

          struct Source data;
          int result;
          data.a = 200;
          data.b = 100;
          /* 兩個(gè)數(shù)相加的操作 */
          data.operation = add2;  
          result = data.operation(data.a, data.b);
          printf("加法運(yùn)算: %d+%d = %d\n",data.a, data.b, result);


          函數(shù)指針data.operation指向加法函數(shù)add2,則調(diào)用data.operation就可以進(jìn)行加法運(yùn)算。同理,有:

          /* 兩個(gè)數(shù)相減的操作 */
          data.operation = sub2;
          result = data.operation(data.a, data.b);
          printf("減法運(yùn)算: %d-%d = %d\n",data.a, data.b, result);
           
          /* 兩個(gè)數(shù)相乘的操作 */
          data.operation = mul2;
          result = data.operation(data.a, data.b);
          printf("乘法運(yùn)算: %d*%d = %d\n",data.a, data.b, result);
           
          /* 兩個(gè)數(shù)相除的操作 */
          data.operation = div2;
          result = data.operation(data.a, data.b);
          printf("除法運(yùn)算: %d/%d = %d\n",data.a, data.b, result);


          運(yùn)行結(jié)果:

          版權(quán)聲明:本文來(lái)源網(wǎng)絡(luò),免費(fèi)傳達(dá)知識(shí),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系我進(jìn)行刪除。

          ????????????????  END  ???????????????

          關(guān)注我的微信公眾號(hào),回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


          點(diǎn)擊“閱讀原文”查看更多分享,歡迎點(diǎn)分享、收藏、點(diǎn)贊、在看。

          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月伊人网 | 成人无码区免费A片在线软件 | 黄片高清无码 | 人人射人人干 | 超碰夫妻自拍 |