• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      C語(yǔ)言指針的綜合應(yīng)用研究

      2014-03-14 01:26:13蔣玲玲
      電腦與電信 2014年4期
      關(guān)鍵詞:字符串數(shù)組指針

      蔣玲玲

      (武漢船舶職業(yè)技術(shù)學(xué)院,湖北 武漢 430050)

      C語(yǔ)言指針的綜合應(yīng)用研究

      蔣玲玲

      (武漢船舶職業(yè)技術(shù)學(xué)院,湖北 武漢 430050)

      C語(yǔ)言是一門(mén)優(yōu)秀的語(yǔ)言,其在多個(gè)領(lǐng)域都有著很好的應(yīng)用。指針是C語(yǔ)言的精華所在。本文闡述了指針的概念,對(duì)指針的常見(jiàn)類(lèi)型進(jìn)行了分析,并對(duì)指針的運(yùn)算和相關(guān)應(yīng)用做了詳細(xì)的實(shí)例講解,有效引入了指針對(duì)數(shù)組和函數(shù)的調(diào)用,對(duì)具體問(wèn)題進(jìn)行了講解。

      C語(yǔ)言;指針;應(yīng)用

      1.引言

      在常見(jiàn)的高等編程語(yǔ)言中,C語(yǔ)言是一種基本的語(yǔ)言,涵蓋數(shù)據(jù)類(lèi)型多種多樣,其精華是指針,可以巧妙地實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的復(fù)雜形式。C語(yǔ)言在編程中的使用頻率很高,甚至成為針對(duì)某一問(wèn)題解決的必要方法,同時(shí),可以借助指針對(duì)功能大幅度提升代碼的執(zhí)行效率。所以,C語(yǔ)言中指針使用的靈活與否,成為衡量C語(yǔ)言編程功底的重要指標(biāo)之一。

      2.指針的概念

      存儲(chǔ)器是計(jì)算機(jī)硬件設(shè)備中存放數(shù)據(jù)的組成部分,通常存儲(chǔ)器中的一個(gè)內(nèi)存單元就是一個(gè)字節(jié)。數(shù)據(jù)類(lèi)型不同,其所占的內(nèi)存單元、字節(jié)數(shù)也不同。占兩個(gè)單元的數(shù)據(jù)類(lèi)型有整型,占一個(gè)單元的數(shù)據(jù)類(lèi)型有字符型。給每個(gè)內(nèi)存單元進(jìn)行編號(hào),可以有效、準(zhǔn)確地訪(fǎng)問(wèn)此類(lèi)內(nèi)存單元??梢砸罁?jù)內(nèi)存單元的編號(hào)迅速查找相應(yīng)的內(nèi)存單元。地址是內(nèi)存單元的別稱(chēng)。指針就是地址,按照指針就能找到需要訪(fǎng)問(wèn)的內(nèi)存單元。

      3.指針類(lèi)型概述

      3.1 指針的基本類(lèi)型

      簡(jiǎn)單的數(shù)據(jù)類(lèi)型是基本的類(lèi)型指針,常見(jiàn)有整型、字符型和實(shí)型。

      比如:int*t;

      Int t1;

      T=&t1;

      這個(gè)例子,對(duì)整型數(shù)據(jù)指針t和整型變量t1進(jìn)行定義,然后把整型變量t1的地址單元對(duì)整型數(shù)據(jù)指針T進(jìn)行賦值。

      3.2 對(duì)數(shù)組進(jìn)行指向的指針

      此類(lèi)指針對(duì)一個(gè)數(shù)組進(jìn)行指向,類(lèi)型即為數(shù)組,可以指向一維、二維甚至多維數(shù)組。

      比如:int shu[6];

      Int*t1;

      T1=str;

      這個(gè)例子,對(duì)整型的一維數(shù)組str進(jìn)行定義,還對(duì)整型數(shù)據(jù)指針t1進(jìn)行定義,接著又把數(shù)組名shu賦值給指針t1,數(shù)組名shu表示一維數(shù)組中第一個(gè)元素shu[0]的地址,也就是數(shù)組的首地址,此例子把數(shù)組shu的首地址賦值給整型指針T1。

      3.3 二級(jí)指針

      二級(jí)指針是指針變量指向是某一個(gè)指針的地址。比如:Int defen;Int*t1;int**tt;t1=&defen;Tt=&t1;

      這個(gè)例子對(duì)整型變量defen進(jìn)行了定義,對(duì)整型指針t1進(jìn)行定義,然后對(duì)二級(jí)指針tt進(jìn)行定義,接著把整型變量defen的值賦值給一級(jí)指針t1,整型變量defen的首地址存放在t1中。最后一步,把一級(jí)指針t1的地址對(duì)二級(jí)指針tt進(jìn)行賦值。以此類(lèi)推,也可以把二級(jí)指針tt的地址賦值給三級(jí)指針,甚至多級(jí)。

      3.4 指向函數(shù)的指針

      指針指向函數(shù)的首地址的指針就是指向函數(shù)的指針。所以,可以借助調(diào)用指針變量來(lái)對(duì)函數(shù)進(jìn)行調(diào)用。

      比如:#include〈stdio.h〉

      int max(int x,int y){return(x〉y?x:y);}

      int main()

      {

      int(*ptr)(int,int);int a,b,c;ptr=max;

      scanf("%d%d",&a,&b);

      c=(*ptr)(a,b);

      printf("a=%d,b=%d,max=%d",a,b,c);

      }

      此函數(shù)定義了整型指針,通過(guò)對(duì)指針的運(yùn)用來(lái)調(diào)用函數(shù)。

      3.5 指針數(shù)組

      由指針變量組成的數(shù)組叫做指針數(shù)組,就是說(shuō),數(shù)組的每一個(gè)組成元素都是指針。

      比如:int(*t)[6];

      int shu[6];

      t=shu;

      這個(gè)例子中,對(duì)指針t進(jìn)行了定義,這個(gè)指針指向數(shù)組shu,該數(shù)組由6個(gè)元素組成,每個(gè)數(shù)組的元素都是整型變量。整型數(shù)組shu擁有6個(gè)數(shù)組元素。然后shu賦值給t,整型數(shù)組shu的地址賦值給了整型數(shù)組指針t。賦值的左右兩端保持一致性。

      4.指針的運(yùn)算和相關(guān)應(yīng)用

      4.1 指針的相關(guān)運(yùn)算

      (1)運(yùn)算符號(hào)&用于取地址,對(duì)數(shù)組元素和變量進(jìn)行取地址,同時(shí),要對(duì)元素和變量的類(lèi)型加以注意。

      (2)“=”賦值運(yùn)算符、“*”取內(nèi)容運(yùn)算符。

      把和指針變量的定義中相同的變量類(lèi)型的指針變量賦值,不允許常量值和變量值。對(duì)指針指向的部門(mén)變量取值可以用取內(nèi)容運(yùn)算符“*”。對(duì)于指針指向的目標(biāo)的數(shù)據(jù)類(lèi)型要注意,并非所有的目標(biāo)變量的值都能取出來(lái)。

      (3)++、--以及算數(shù)運(yùn)算符和比較運(yùn)算符

      對(duì)簡(jiǎn)單變量進(jìn)行指向?qū)χ羔樳M(jìn)行++、--運(yùn)算,實(shí)際上沒(méi)有意義,有些不對(duì)的指針運(yùn)算會(huì)造成錯(cuò)誤的結(jié)果。

      4.2 指針、指針數(shù)組以及函數(shù)的運(yùn)用

      下面通過(guò)實(shí)際案例來(lái)強(qiáng)化數(shù)組、函數(shù)中指針對(duì)應(yīng)用。比如:對(duì)于一批字符按照從大到小的方式排列。為使測(cè)序的功能形成模塊,使用函數(shù)實(shí)現(xiàn)一定功能,來(lái)強(qiáng)調(diào)函數(shù)中指針的應(yīng)用。在主函數(shù)中,對(duì)字符指針數(shù)組進(jìn)行定義char*shu[],各元素值用各字符串對(duì)指針來(lái)初始化,不同串的首個(gè)指針由各元素分別指向。

      排序的思路:函數(shù)sort可以用來(lái)排序,按照從大到小的原則對(duì)一批字符串進(jìn)行排序,指針數(shù)組的各元素shu[0]—[4]以此存儲(chǔ)字符串的首指針。函數(shù)out對(duì)元素shu[0]—[4]進(jìn)行輸出,并指向字符串,這就是字符串排序后的情況。程序?yàn)椋?/p>

      int slen(char*u){char*s=u;while(*s)s++;

      return(s-u);}

      /*這個(gè)函數(shù)對(duì)任意字符數(shù)組求長(zhǎng)*/

      int scmp(char b[],char*c)/*這個(gè)函數(shù)對(duì)字符串b和c的大小進(jìn)行比較*/

      {while(*b==*c&&*b&&*c)b++,c++;return(*b-*c);}

      void out(char shu[])/*對(duì)所有字符串進(jìn)行輸出*/

      {char**q=shu;/*q指向指針數(shù)組shu的首個(gè)元素地址*/

      while(q〈shu+5){printf("%shu[%d,%q] ",*p,slen(*q),*q)}

      q++;}/*指針q指向指針數(shù)組shu的下一個(gè)元素是q++ */

      printf(" ");}

      void sort(char*r[],int n)/*指針數(shù)組作為形參,用選擇排序法對(duì)字符串進(jìn)行從大到小的排序*/

      {char**q,**r,**u*w;/*這幾個(gè)指針變量的作用和類(lèi)型要引起重視*/

      for(q=s;q〈s+n-1;q++,l++)/*控制某一個(gè)串指針對(duì)應(yīng)的元素,q開(kāi)始指向首元素(shu≤q≤shu+3)*/

      {u=q;/*q、u開(kāi)始指向每一次循環(huán)比較的起始字符串對(duì)應(yīng)的元素*/

      for(r=q+1;r〈s+n;r++)/*r控制其余串指針?biāo)鶎?duì)應(yīng)的元素,也就是說(shuō)比較次數(shù),(q+1≤r≤t+4)*/

      if(scmp(*u,*r)〈0)u=r;/*比較u、r所指元素所對(duì)應(yīng)的串,使u指向大串對(duì)應(yīng)的元素*/

      if(u!=q)w=*q,*q=*u,*u=w;/*交換r、u所指元素的值(對(duì)應(yīng)串的存儲(chǔ)地址),進(jìn)行排序*/

      }/*排序前后分別輸出字符串,以此進(jìn)行比較*/

      函數(shù)、數(shù)組中指針的應(yīng)用解讀:sort是常用的字符串排序函數(shù),該函數(shù)參數(shù)是指針數(shù)組,字符串個(gè)數(shù)用n表示。運(yùn)用指針指向數(shù)組的相關(guān)運(yùn)算,對(duì)字符串進(jìn)行從大到小的排列。q、r是二重指針,對(duì)排序外部循環(huán)進(jìn)行控制。外部循環(huán)的控制變量q對(duì)比較次數(shù)進(jìn)行控制,也對(duì)每一輪第一個(gè)元素進(jìn)行控制。shu≤q≤shu+3。變量r是內(nèi)循環(huán)變量,對(duì)每次比較的次數(shù)進(jìn)行控制。對(duì)其余字符串指針元素進(jìn)行存儲(chǔ)。q+1≤r≤shu+4。先用二重指針q、u指向每一輪第一串指針對(duì)應(yīng)的元素,再進(jìn)行內(nèi)循環(huán)。內(nèi)循環(huán)對(duì)某個(gè)串和其余串進(jìn)行兩兩比較,每一次結(jié)束后,二重指針u指向大字符串。結(jié)束內(nèi)循環(huán)后,把u指向?qū)υ貙?duì)值交換每一次循環(huán)對(duì)第一個(gè)元素的值。對(duì)元素值進(jìn)行交換,其實(shí)是對(duì)兩個(gè)串的存儲(chǔ)位置進(jìn)行存放。進(jìn)行完所有字符串的排序后,元素shu[0]—shu[4]里面存儲(chǔ)進(jìn)行完排序?qū)ψ址畬?duì)應(yīng)的第一個(gè)指針。

      這個(gè)實(shí)驗(yàn)中,都是借助相應(yīng)的指針或者指針變量的相關(guān)運(yùn)算實(shí)現(xiàn)對(duì)循環(huán)的控制和對(duì)數(shù)組的操作。

      5.結(jié)語(yǔ)

      C語(yǔ)言中的精髓是指針,指針的優(yōu)勢(shì)在對(duì)數(shù)組及函數(shù)的控制中發(fā)揮的淋漓盡致,可以提升運(yùn)算和執(zhí)行效率,準(zhǔn)確地實(shí)現(xiàn)復(fù)雜的功能,可以應(yīng)用在較為系統(tǒng)的程序系列中。

      [1]李俊萩,趙家剛,張晴暉.C語(yǔ)言指針教學(xué)中的知識(shí)點(diǎn)分析與總結(jié)[J].計(jì)算機(jī)教育,2011(8):55-61.

      [2]邱建林,劉維富,顧暉,等.C語(yǔ)言程序設(shè)計(jì)教學(xué)的研究與實(shí)踐[J].電氣電子教學(xué)學(xué)報(bào),2003,25(4):96-98.

      [3]孫玉霞.C語(yǔ)言程序設(shè)計(jì)中若干問(wèn)題的探討[J].沈陽(yáng)航空工業(yè)學(xué)院學(xué)報(bào),2004,21(3):52-54. [4]高閣.C語(yǔ)言指針教學(xué)的研究與探討[J].機(jī)電產(chǎn)品開(kāi)發(fā)與創(chuàng)新,2010,(1):185-186.

      [5]胡建榮,羅杰紅.高職C語(yǔ)言程序設(shè)計(jì)課程實(shí)踐教學(xué)體系的設(shè)計(jì)[J].計(jì)算機(jī)教育,2010,10:150-152.

      [6]吳朝海.對(duì)一個(gè)錯(cuò)誤使用C語(yǔ)言指針程序的剖析[J].青海師范大學(xué)學(xué)報(bào):自然科學(xué)版,2004(3):45-46.

      Application of C Language Pointer

      Jiang Lingling
      (Wuhan Institute of Shipbuilding Technology,Wuhan 430050,Hubei)

      C language is used widely in many fields.The pointer is the essence of Clanguage.This paper expounds the concept of pointer and its common type,than explains the arithmetic and related applications of pointer in details with cases.The calls for array and function by pointer are also explained.

      Clanguage pointer;application

      蔣玲玲,女,江蘇宜興人,本科,講師,研究方向:計(jì)算機(jī)應(yīng)用。

      猜你喜歡
      字符串數(shù)組指針
      JAVA稀疏矩陣算法
      JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
      偷指針的人
      為什么表的指針都按照順時(shí)針?lè)较蜣D(zhuǎn)動(dòng)
      尋找勾股數(shù)組的歷程
      基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
      ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
      一種新的基于對(duì)稱(chēng)性的字符串相似性處理算法
      依據(jù)字符串匹配的中文分詞模型研究
      VB數(shù)組在for循環(huán)中的應(yīng)用
      考試周刊(2012年88期)2012-04-29 04:36:47
      土默特左旗| 龙口市| 秦安县| 呼和浩特市| 洪雅县| 防城港市| 丹东市| 平泉县| 大关县| 龙川县| 灵璧县| 锡林浩特市| 华宁县| 偏关县| 临江市| 奎屯市| 怀柔区| 临武县| 怀仁县| 秭归县| 吉木萨尔县| 如东县| 莱阳市| 手机| 德惠市| 浪卡子县| 永年县| 凤阳县| 洞头县| 建平县| 古交市| 安阳市| 闻喜县| 张北县| 齐河县| 秦皇岛市| 侯马市| 惠州市| 西乌珠穆沁旗| 自治县| 白水县|