• 
    

    
    

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

      ?

      淺析C語言中指針的應(yīng)用

      2014-10-20 11:13謝忠東
      關(guān)鍵詞:數(shù)組指針C語言

      謝忠東

      摘 要:指針是C語言的精華部分,也是C語言課程的重點(diǎn)和難點(diǎn)章節(jié)之一,在C語言編程中起著重要的作用。只有理解了指針并能靈活運(yùn)用指針,才算真正學(xué)會(huì)了C語言。因此我們?cè)贑語言教學(xué)過程中應(yīng)特別注意指針,引導(dǎo)學(xué)生正確靈活地應(yīng)用指針,編制高效的程序,發(fā)揮C語言的優(yōu)勢(shì)。

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

      指針是C語言中一個(gè)重要的概念,是C語言課程的重點(diǎn)難點(diǎn)章節(jié)之一,也是C語言的精華部分,在C語言編程中起著重要的作用。利用指針可以編寫靈活高效的程序。只有理解了指針并能靈活運(yùn)用指針,才算真正學(xué)會(huì)了C語言。因此我們?cè)贑語言教學(xué)過程中應(yīng)特別注意指針單元,引導(dǎo)學(xué)生正確靈活地應(yīng)用指針,編制高效的程序,發(fā)揮C語言的優(yōu)勢(shì)。但由于指針是一種特殊的數(shù)據(jù)類型,概念較復(fù)雜,大多數(shù)初學(xué)者感到較難理解,使用不好反而會(huì)帶來一些麻煩。

      1 理解指針概念

      在C語言中定義的任意變量,在內(nèi)存中都占用一定的存儲(chǔ)單元。存儲(chǔ)單元的每個(gè)字節(jié)都對(duì)應(yīng)一個(gè)編號(hào)(就好比酒店中設(shè)有很多間客房,每間客房都有對(duì)應(yīng)的房牌號(hào)),此編號(hào)就是變量在內(nèi)存中的存儲(chǔ)地址。指針就是用來表示這些地址的變量。簡(jiǎn)單地說,指針就是地址。例如:int x;int *point;point=&x;;表示point為指針變量,存放變量x的地址;x就是指針變量point所指向的變量。假設(shè)x的地址為2016,則point所存儲(chǔ)的地址即為2016。很多學(xué)生最初都存在這樣的疑問:若2016是變量x的地址,那么要表示指針point存放變量x的地址是否可以這樣賦值:point=2016。這是錯(cuò)誤的,這個(gè)賦值語句中的2016表示是一個(gè)整型數(shù)據(jù),不能表示地址。對(duì)于指針變量的賦值只能用取地址運(yùn)算符"&"進(jìn)行賦值,即:point=&x;;&x;表示變量x的地址。初學(xué)者還需注意:指針必須先賦值后使用,指針指向的變量類型必須和指針類型一致。

      2 區(qū)分定義指針變量的*和指針運(yùn)算符*

      定義指針變量語句中的*是對(duì)指針變量的說明,如int *point表示定義point是一個(gè)指向int類型的指針變量。

      指針運(yùn)算符*是一個(gè)單目運(yùn)算符,必須和指針變量結(jié)合表示間接訪問該指針指向的對(duì)象。如int x=50,*point=&x;;*point=60;第1個(gè)*表示定義point是一個(gè)指向x的指針變量,第2個(gè)*和指針共同組成表達(dá)式*point表示間接訪問x,相當(dāng)于給x重新賦值為60。

      3 指針與數(shù)組

      一個(gè)數(shù)組由若干個(gè)元素組成,每個(gè)元素都對(duì)應(yīng)一個(gè)地址,C語言中定義數(shù)組的指針,是指向整個(gè)數(shù)組的起始地址,和數(shù)組名表示的地址相同。數(shù)組元素的指針是數(shù)組元素的地址。例如:char s[10];char *p;這里的數(shù)組名s就是數(shù)組的首地址,若賦值p=s,則p為指向數(shù)組s的指針,表示整個(gè)數(shù)組的首地址,s+3表示距離s后3個(gè)位置所在單元的地址。s[3]表示數(shù)組中第4個(gè)元素的值,即距離s后3個(gè)位置所在單元中的值,因此s[3]與*(s+3)等價(jià)。由于p也表示數(shù)組的首地址,p+3與s+3等價(jià),因此p[3]與*(p+3)、s[3]、*(s+3)等價(jià)。需要注意的是,p是允許移動(dòng)的,如p=p+2,表示p發(fā)生改變,變?yōu)橹赶蛟豷[2]的地址,此時(shí)p[3]、*(p+3)不再表示s[3]的值,而是與s[5]等價(jià)。而此例中的s只能表示數(shù)組的首地址,不能出現(xiàn)這樣的賦值:s=s+2。

      4 指針與函數(shù)

      在指針與函數(shù)的關(guān)系中,有函數(shù)指針、指針函數(shù)、指針作為函數(shù)參數(shù)的三種常用形式。

      (1)函數(shù)指針

      函數(shù)指針是指向函數(shù)起始地址的指針,定義格式是:類型名 (*指針變量名)( );由于函數(shù)是一個(gè)整體,函數(shù)指針不能做自增、自減運(yùn)算。

      (2)指針函數(shù)

      指針函數(shù)是表示指針的函數(shù),其本質(zhì)是一個(gè)函數(shù),返回值是某一類型的指針,定義格式是:類型名 *函數(shù)名(參數(shù)列表);由于返回值是地址,因此類型一般都定義為int。

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

      函數(shù)的參數(shù)可以為字符型、整型、浮點(diǎn)型等數(shù)據(jù),也可以是指針類型,它的作用是將變量的地址傳遞到另一個(gè)函數(shù)中。

      例如,有兩個(gè)整型變量,m的值為55,n的值為66,若要交換m、n的值,使得m的值為66,n的值為55。首先我們以傳值的方式構(gòu)建函數(shù):

      Void func_val(int x,int y)

      {

      t=x;

      x=y;

      y=t;

      }

      在調(diào)用函數(shù)func_val(m,n)后,發(fā)現(xiàn)m、n的值并沒有被交換。因?yàn)楹瘮?shù)調(diào)用時(shí),將實(shí)參的值傳遞給形參,函數(shù)最終交換的值是形參x、y的值,并不是實(shí)參m、n的值。

      要想使函數(shù)對(duì)兩個(gè)實(shí)參進(jìn)行交換,必須使實(shí)參與賦值后的形參變量所處的地址是相同的??梢砸灾羔樀男问阶鳛樾螀⒅匦聵?gòu)建函數(shù):

      Void func_addr(int *p,int *q)

      {

      t=*p;

      *p=*q;

      *q=t;

      }

      在調(diào)用函數(shù)時(shí),必須將m、n地址傳遞給以指針形式表示的形參p、q,調(diào)用表達(dá)式應(yīng)為func_addr(&m;,&n;),調(diào)用之后實(shí)參m、n的值被交換了。通過此例可以看出,指針作為形參可以改變實(shí)參的值,使函數(shù)構(gòu)建的功能更加模塊化。在C語言程序設(shè)計(jì)過程中,指針可能是實(shí)現(xiàn)某些算法的唯一方法。

      5 結(jié)束語

      C語言程序設(shè)計(jì)是國(guó)內(nèi)外大學(xué)計(jì)算機(jī)課程中重要的課程之一,指針是該課程中非常重要的部分,也是難點(diǎn)之一。在理論學(xué)習(xí)了指針的各知識(shí)點(diǎn)后,還應(yīng)鼓勵(lì)學(xué)生在課后要多思考、多編程、多實(shí)踐。

      參考文獻(xiàn):

      [1]楊智明.C語言指針使用分析[J].保山學(xué)院學(xué)報(bào),2012.

      猜你喜歡
      數(shù)組指針C語言
      JAVA稀疏矩陣算法
      基于Visual Studio Code的C語言程序設(shè)計(jì)實(shí)踐教學(xué)探索
      JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
      基于C語言的計(jì)算機(jī)軟件編程
      Excel數(shù)組公式在林業(yè)多條件求和中的應(yīng)用
      高職高專院校C語言程序設(shè)計(jì)教學(xué)改革探索
      尋找勾股數(shù)組的歷程
      基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
      論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應(yīng)用
      ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
      曲松县| 辛集市| 西城区| 明光市| 驻马店市| 灵石县| 湖口县| 花莲市| 昌吉市| 阿克陶县| 南雄市| 隆子县| 防城港市| 图们市| 会昌县| 香格里拉县| 邯郸市| 全椒县| 汶川县| 五大连池市| 固始县| 石狮市| 郯城县| 新民市| 汨罗市| 繁昌县| 吉木乃县| 辽宁省| 沙洋县| 宝山区| 尼勒克县| 屏东县| 沙湾县| 邵阳县| 外汇| 涿州市| 安徽省| 博白县| 长泰县| 遂宁市| 南澳县|