• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 牛人業話 > C語言的一些高級議題

    C語言的一些高級議題

    作者:areak 時間:2014-10-23 來源:電子產品世界 收藏

      的靈魂,我們經常聽到這樣的說法,當我們初學的時候,似乎覺得也沒有什么,但是當你越來越深入的了解它,你就會發現的強大有時甚至超乎你的想象。C語言作為一種相對較為底層的語言,在某些方面有著不可替代的優勢。因此,要學好C語言,要深入,要精通。

    本文引用地址:http://www.czjhyjcfj.com/article/264327.htm

      C語言之回調

      先來看下的的基礎知識,,顧名思義,就是指向函數的指針,聲明方法如下:

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

      int (*pfunc)(int) = & func; //創建函數指針pfunc,并指向函數func

      這里的&操作符可有可無,因為函數名本身就是一個地址。

      回調函數是一個程序員不能顯式調用的函數;通過將回調函數的地址傳給調用者從而實現調用。在我們想通過一個統一接口實現不同的內容時,用回調函數非常合適。

      例如:有如下用于不同設備的顯示函數

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

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

      使用時我們就可以將函數作為參數

      show(A_show);

      再舉一個經典的例子,實現在一個單鏈表中查找一個值。

      Node *

      Search_list(Node *node,int const value)

      {

      While(node!=NULL){

      if(node->value == value)

      break;

      node = node->link;

      }

      return node;

      }

      這個函數只適用于值為整形的鏈表,因為value的值為int型,如果此時你需要在一個字符串鏈表中查找,需要編寫另外的函數來實現。這時就用到了回調函數,使查找函數與類型無關,這樣就能用于任何類型的值的鏈表。

      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;

      }

      我們在使用Search_list函數時,你已經知道要查找數據的數據類型了。用法如下:

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

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

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

      {

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

      return 0;

      else

      return 1;

      }

      當然你不必這樣來寫,因為C語言函數庫里面有這樣的函數

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

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

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

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

    c語言相關文章:c語言教程



    上一頁 1 2 下一頁

    關鍵詞: C語言 指針 函數

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 古田县| 浦江县| 会同县| 方山县| 从江县| 黄大仙区| 溧水县| 贵港市| 阳江市| 鄢陵县| 宜春市| 同江市| 栖霞市| 开原市| 手游| 安溪县| 西乌珠穆沁旗| 海城市| 八宿县| 永宁县| 双辽市| 民乐县| 海晏县| 大同市| 嵩明县| 罗甸县| 镇康县| 义马市| 吉首市| 长阳| 武冈市| 阿尔山市| 墨玉县| 三门县| 新龙县| 米脂县| 南安市| 南城县| 磐安县| 云林县| 喀喇沁旗|