<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > C語言的一些高級(jí)議題

          C語言的一些高級(jí)議題

          作者:areak 時(shí)間:2014-10-23 來源:電子產(chǎn)品世界 收藏

            的靈魂,我們經(jīng)常聽到這樣的說法,當(dāng)我們初學(xué)的時(shí)候,似乎覺得也沒有什么,但是當(dāng)你越來越深入的了解它,你就會(huì)發(fā)現(xiàn)的強(qiáng)大有時(shí)甚至超乎你的想象。C語言作為一種相對(duì)較為底層的語言,在某些方面有著不可替代的優(yōu)勢(shì)。因此,要學(xué)好C語言,要深入,要精通。

          本文引用地址:http://www.ex-cimer.com/article/264327.htm

            C語言之回調(diào)

            先來看下的的基礎(chǔ)知識(shí),,顧名思義,就是指向函數(shù)的指針,聲明方法如下:

            int func(int); //函數(shù)原型

            int (*pfunc)(int) = & func; //創(chuàng)建函數(shù)指針pfunc,并指向函數(shù)func

            這里的&操作符可有可無,因?yàn)楹瘮?shù)名本身就是一個(gè)地址。

            回調(diào)函數(shù)是一個(gè)程序員不能顯式調(diào)用的函數(shù);通過將回調(diào)函數(shù)的地址傳給調(diào)用者從而實(shí)現(xiàn)調(diào)用。在我們想通過一個(gè)統(tǒng)一接口實(shí)現(xiàn)不同的內(nèi)容時(shí),用回調(diào)函數(shù)非常合適。

            例如:有如下用于不同設(shè)備的顯示函數(shù)

            Void A_show(); Void B_show(); Void C_show();

            Void show(void (*ptr)());

            使用時(shí)我們就可以將函數(shù)作為參數(shù)

            show(A_show);

            再舉一個(gè)經(jīng)典的例子,實(shí)現(xiàn)在一個(gè)單鏈表中查找一個(gè)值。

            Node *

            Search_list(Node *node,int const value)

            {

            While(node!=NULL){

            if(node->value == value)

            break;

            node = node->link;

            }

            return node;

            }

            這個(gè)函數(shù)只適用于值為整形的鏈表,因?yàn)関alue的值為int型,如果此時(shí)你需要在一個(gè)字符串鏈表中查找,需要編寫另外的函數(shù)來實(shí)現(xiàn)。這時(shí)就用到了回調(diào)函數(shù),使查找函數(shù)與類型無關(guān),這樣就能用于任何類型的值的鏈表。

            Node *

            Search_list(Node *node,void const value,

            int (*compare)(void const * ,void const *))

            {

            While(node!=NULL){

            if(compare(&node->value,value)==0)

            break;

            node = node->link;

            }

            return node;

            }

            int compare_ints(void const *a, void const *b)

            {

            if(*(int*)a == *(int *)b)

            return 0;

            else

            return 1;

            }

            我們?cè)谑褂肧earch_list函數(shù)時(shí),你已經(jīng)知道要查找數(shù)據(jù)的數(shù)據(jù)類型了。用法如下:

            Desired_node = Search_list(root, &desired_value,compare_ints);

            那如果你要在一個(gè)字符串鏈表中查找呢?首先你要在定義用于比較字符串一個(gè)函數(shù):

            int compare_chars(void const *a, void const *b)

            {

            if(*(char*)a == *(char *)b)

            return 0;

            else

            return 1;

            }

            當(dāng)然你不必這樣來寫,因?yàn)镃語言函數(shù)庫(kù)里面有這樣的函數(shù)

            strcmp( const char *string1, const char *string2 );

            所以你就可以直接使用下面的代碼來實(shí)現(xiàn)在字符串鏈表中查找字符值的功能

            Desired_node = Search_list(root, &desired_value, strcmp);

            這樣,可以不必修改Search_list函數(shù),而使得Search_list函數(shù)的功能更加通用。

          c語言相關(guān)文章:c語言教程



          上一頁 1 2 下一頁

          關(guān)鍵詞: C語言 指針 函數(shù)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();