国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時(shí)間:2016-2-29 14:09    發(fā)布者:designapp
關(guān)鍵詞: C語(yǔ)言 , 指針 , 函數(shù)
  指針是C語(yǔ)言的靈魂,我們經(jīng)常聽(tīng)到這樣的說(shuō)法,當(dāng)我們初學(xué)C語(yǔ)言的時(shí)候,似乎覺(jué)得也沒(méi)有什么,但是當(dāng)你越來(lái)越深入的了解它,你就會(huì)發(fā)現(xiàn)C語(yǔ)言的強(qiáng)大有時(shí)甚至超乎你的想象。C語(yǔ)言作為一種相對(duì)較為底層的語(yǔ)言,在某些方面有著不可替代的優(yōu)勢(shì)。因此,要學(xué)好C語(yǔ)言,要深入,要精通。
  C語(yǔ)言之回調(diào)函數(shù)
  先來(lái)看下函數(shù)指針的的基礎(chǔ)知識(shí),函數(shù)指針,顧名思義,就是指向函數(shù)的指針,聲明方法如下:
  int func(int); //函數(shù)原型
  int (*pfunc)(int) = & func; //創(chuàng)建函數(shù)指針pfunc,并指向函數(shù)func
  這里的&操作符可有可無(wú),因?yàn)楹瘮?shù)名本身就是一個(gè)地址。
  回調(diào)函數(shù)是一個(gè)程序員不能顯式調(diào)用的函數(shù);通過(guò)將回調(diào)函數(shù)的地址傳給調(diào)用者從而實(shí)現(xiàn)調(diào)用。在我們想通過(guò)一個(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è)字符串鏈表中查找,需要編寫(xiě)另外的函數(shù)來(lái)實(shí)現(xiàn)。這時(shí)就用到了回調(diào)函數(shù),使查找函數(shù)與類(lèi)型無(wú)關(guān),這樣就能用于任何類(lèi)型的值的鏈表。
  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ù)類(lèi)型了。用法如下:
  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)然你不必這樣來(lái)寫(xiě),因?yàn)镃語(yǔ)言函數(shù)庫(kù)里面有這樣的函數(shù)
  strcmp( const char *string1, const char *string2 );
  所以你就可以直接使用下面的代碼來(lái)實(shí)現(xiàn)在字符串鏈表中查找字符值的功能
  Desired_node = Search_list(root, &desired_value, strcmp);
  這樣,可以不必修改Search_list函數(shù),而使得Search_list函數(shù)的功能更加通用。
                               
                  C語(yǔ)言之面向?qū)ο?/strong>
  我們經(jīng)常說(shuō)C語(yǔ)言是面向過(guò)程的語(yǔ)言,而C++、JAVA是面向?qū)ο蟮模敲嫦驅(qū)ο蟛⒉皇荂++、JAVA的專(zhuān)利,C語(yǔ)言里面也有面向?qū)ο蟮乃枷耄热缥覀兘?jīng)常使用的結(jié)構(gòu)體。
  struct student
  {
  char name[256];
  int age;
  };
  學(xué)生的姓名和年齡,就是學(xué)生自身的屬性,和C++里面的成員變量是一樣的概念,但是這個(gè)結(jié)構(gòu)體里面并沒(méi)有體現(xiàn)出方法的使用。在面向?qū)ο笾杏蟹庋b的概念,結(jié)構(gòu)體中的成員我們不應(yīng)該直接訪問(wèn),而應(yīng)該通過(guò)方法訪問(wèn),我們可以添加訪問(wèn)結(jié)構(gòu)體成員變量的方法。
  char* get_name(student * self);//獲取學(xué)生姓名
  void set_name(student * self, char* name);//設(shè)置學(xué)生姓名
  char* get_name(student * self)
  {
  return self->name;
  }
  void set_name(student * self, char* name)
  {
  strncpy(self->name, name, sizeof(self->name));
  }
  此處省略age的設(shè)置和獲取功能。
  現(xiàn)在類(lèi)的數(shù)據(jù)、方法都有了,下一步就是要使用類(lèi)創(chuàng)建、初始化、析構(gòu)、銷(xiāo)毀對(duì)象,在C++中有new、delete操作符負(fù)責(zé)創(chuàng)建和銷(xiāo)毀,使用C語(yǔ)言實(shí)現(xiàn)如下:
  student * student _create(void);// 對(duì)象創(chuàng)建和初始化
  void student _destroy(student * self);// 對(duì)象析構(gòu)和銷(xiāo)毀
  student * student _create(void)
  {
  student * self = malloc(sizeof(student));
  memset(self->name, 0x00, sizeof(self->name));
  self->age = 0;
  return self;
  }
  void student _destroy(student * self)
  {
  free(self);
  }
  至此,我們就可以采用面向?qū)ο蟮姆绞絹?lái)編寫(xiě)代碼了。
  student * student1= NULL;
  student1 = student _create();//創(chuàng)建對(duì)象
  set_name(student1, "mary");//初始化student1的名字為mary
  set_age(student1, 20); //初始化student1的年齡為20
  get_name(student1);//獲取student1的姓名
  student _destroy(student1);//銷(xiāo)毀對(duì)象
  當(dāng)然C語(yǔ)言還有很多強(qiáng)大的功能,比如可變參數(shù)的函數(shù)設(shè)計(jì),無(wú)一例外都要借助于指針來(lái)實(shí)現(xiàn)。以上內(nèi)容參考于網(wǎng)絡(luò)資源,如有錯(cuò)誤之處,懇請(qǐng)指正。
                               
               
本文地址:http://m.qingdxww.cn/thread-161443-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕专区高清在线观看 | 一区二区视频在线 | 黄毛片一级毛片 | 日韩福利视频导航 | 色综合久久88色综合天天提莫 | 日韩一区二区不卡 | 麻豆视频秘密入口 | 国精品日韩欧美一区二区三区 | 日韩在线观看免费完整版视频 | 日韩欧美在线免费观看 | 俄罗斯13一14处出血视频在线 | 91精品久久久久久久99蜜桃 | 天堂在线www下载 | 印度性xxxx | 四虎精品成人免费影视 | 欧美日韩一区二区高清视 | 日本高清色www网站色 | 日本色图在线观看 | 国产亚洲高清在线精品不卡 | 99热这里只有成人精品国产 | 日本一区二区三区免费看 | 在线韩日| 99热最新网站 | 欧美一区二区在线观看视频 | 精品麻豆 | 日韩国产精品欧美一区二区 | 国产精品高清视亚洲精品 | 免费人成网 | 国产四虎免费精品视频 | 五月天美女 | 国产在线精品一区二区高清不卡 | 中文在线天堂网 | 亚洲高清国产一区二区三区 | 色婷婷视频在线 | 99热国产这里只有精品99 | 成人在线第一页 | 91精品国产福利尤物免费 | 青草视频网站在线观看 | 亚洲欧美日韩在线观看看另类 | 亚洲精品国产精品国自产网站 | 亚洲成人第一页 |