• 
    

    
    

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

      ?

      C語言指針在教學(xué)中的基礎(chǔ)應(yīng)用

      2012-04-29 22:54:41陳景彥陳岳彬
      電腦知識(shí)與技術(shù) 2012年21期
      關(guān)鍵詞:指針變量

      陳景彥 陳岳彬

      摘要:可以說指針是C語言的靈魂,熟悉而靈活的運(yùn)用指針,可以有效的表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);動(dòng)態(tài)分內(nèi)存;使用字符串;數(shù)組等都是非常有效的。而初學(xué)者經(jīng)常出現(xiàn)錯(cuò)誤,如何讓學(xué)生掌握和深入的學(xué)習(xí)指針是一難點(diǎn),往往需要一定時(shí)間。以下結(jié)合經(jīng)驗(yàn),對指針問題進(jìn)行探討和總結(jié)。

      關(guān)鍵詞:指針;C語言;變量

      中圖分類號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)21-5163-03

      C Language Pointer in the Teaching of Basic Application

      CHEN Jing-yan1,CHEN Yue-bin2

      (1.Medical College of Shantou University, Shantou 515041, China; 2.Zengcheng College of South China Normal University, Guangzhou 511363, China)

      Abstract:It can be said that the pointer is the soul of the C language, familiar and flexible use of the pointer, you can effectively represent complex data structures; dynamic memory; the use of string; arrays are very effective. Beginners often an error, how to enable students to acquire and in-depth learning pointer is a difficult and often requires some time. The following combination of experience, discuss and summarize the pointer problem.

      Key words:pointer;C language;variable

      C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言,是目前最廣泛使用的計(jì)算機(jī)語言之一,也是各高校專業(yè)與非專業(yè)主要的計(jì)算機(jī)教學(xué)語言。指針是C語言中最為復(fù)雜的一個(gè)部分,使用起來非常靈活,因而學(xué)習(xí)時(shí)常出錯(cuò),必須小心,多思考,多比較,在實(shí)踐中把其掌握好。

      1指針概念

      指針變量簡稱指針,其實(shí)它也是變量,只不過里面存放的內(nèi)容是一個(gè)地址,這個(gè)地址指向另外一個(gè)變量。指針就是內(nèi)存的地址,必須弄清楚數(shù)據(jù)在內(nèi)存中是如何存儲(chǔ)與讀取的;內(nèi)存單元地址與內(nèi)存單元內(nèi)容是兩個(gè)不同的概念。內(nèi)存單元地址就像賓館每個(gè)房間一樣,其房間號(hào)就是其地址,單元內(nèi)容可以理解為房中的賓客;如圖1所示:假設(shè)程序定義了三個(gè)變量a、b、c,編譯時(shí)系統(tǒng)分配1000和10001兩個(gè)字節(jié)給a,1002和1003給b,1004和1005給c。由此可以知道,地址是用來標(biāo)識(shí)每一個(gè)存儲(chǔ)單元,是用戶對存儲(chǔ)單元中的數(shù)據(jù)的訪問,在C語言中形象的將地址叫做指針,它可以用來指向變量、數(shù)組、結(jié)構(gòu)體、和多級指針等等。對于表達(dá)式、常量或者是寄存器變量則不能用指針來指向。

      2指針變量的定義和引用

      2.1指針變量的定義

      C語言規(guī)定指針變量在使用之前必須被定義,遵循先定義后使用的原則,定義指針變量與一般變量定義開式相似,也是用說明語句來實(shí)現(xiàn)的,但不同于其他類型變量的就是它是用來專門存放地址的。

      指針變量定義的一般開式為

      類型標(biāo)識(shí)符*指針變量名;

      下面都是合法的定義:

      int *g1,*g2,*g3;定義g1、g2、g3指向整型數(shù)據(jù)的指針變量。

      float *k1,*k2,*k3;定義k1、k2、k3指向?qū)嵭蛿?shù)據(jù)的指針變量。

      char *m1,*m2,*m3;定義m1、m2、m指向字符型數(shù)據(jù)的指針變量3。

      在定義指針變量值得注意的是:

      ①“*”是一個(gè)指向符號(hào),表示標(biāo)識(shí)符為指針變量,上面的g1、g2、g3等是指針變量名,而不是*g1、*g2、*g3,值得注意的是指針變量是用來存放地址的。

      ②一個(gè)指針變量只能指向同一個(gè)類型的變量。由于不同類型的數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)不同,如果忽而指向一個(gè)整型變量,忽而指向一個(gè)實(shí)型變量,會(huì)使系統(tǒng)無法管理變量的字節(jié)數(shù)而發(fā)生錯(cuò)誤,所以只有同一類型變量的地址才能放到指向該類型變量的指針變量中。

      2.2指針變量的引用

      例如:

      main()

      {

      int i=10,j=20;

      int *g1,*g2;

      g1=&i;

      g2=&j;

      printf("%d,%d ",i,j);

      printf("%d,%d ",*g1,*g2);}

      運(yùn)行結(jié)果為:10,20

      10,20

      本程序定義了兩個(gè)指針變量g1和g2,“g1=&i;和g2=&j;”語句是將i與j的地址分別賦給g1和g2,不能寫成“*g1=&i;和*g2=&j;”。

      與指針相關(guān)的兩個(gè)運(yùn)符:

      ①&:取地址運(yùn)算符。

      ②*:指針運(yùn)算符或稱間接訪問運(yùn)算符,取指針?biāo)赶虻哪繕?biāo)值。

      “&”與“*”運(yùn)算符的優(yōu)先級別相同,按自右而左的方向結(jié)合,如“g1=&i;”語句,若&*g1,先進(jìn)行的是*g1的運(yùn)算,再執(zhí)行&運(yùn)算。如:*&i的含義是什么?當(dāng)然先進(jìn)行&i運(yùn)算,得到i的地址,再進(jìn)行*運(yùn)算。

      3數(shù)組的指針與函數(shù)的指針

      3.1數(shù)組的指針

      有兩個(gè)概念我要必須分清。一個(gè)是指針數(shù)組:首先它是一個(gè)數(shù)組,數(shù)組的元素都是指針,數(shù)組占多少個(gè)字節(jié)由數(shù)組本身決定。它是“儲(chǔ)存指針的數(shù)組”的簡稱。另一個(gè)是數(shù)組指針:首先它是一個(gè)指針,它指向一個(gè)數(shù)組。

      簡單舉例說明:

      int *p[10];首先聲明了一個(gè)數(shù)組,數(shù)組的元素是int型的指針。

      int (*p)[2];聲明了一個(gè)指針,指向了一個(gè)有兩個(gè)int元素的數(shù)組。

      其實(shí)這兩種寫法主要是因?yàn)檫\(yùn)算符的優(yōu)先級,因?yàn)閇]的優(yōu)先級比*高。所以第一種寫法,p先和[]結(jié)合,所以是一個(gè)數(shù)組,后與*結(jié)合,是指針。后一種寫法同理。

      應(yīng)當(dāng)注意,如果數(shù)組為int型,指針變量也應(yīng)是int型。下面是指針元素的賦值:

      p=&a[0];

      C語言規(guī)定數(shù)組名代表數(shù)組的首地址,是第一個(gè)元素的地址。所以p=&a[0]與p=a是等價(jià)的。注意a不代表整個(gè)數(shù)組,“p=a;”的作用是把a(bǔ)數(shù)組的首地址賦給p,而不是a的所有元素都賦給p。

      在定義指針變量時(shí)是可以賦給初值的:

      int *p=&a[0];

      等效于:

      int *p;

      p=&a[0];

      多維數(shù)組(以二維數(shù)組為例)

      二維數(shù)組的定義:

      static int a[2][3]={{1,2,3},{4,5,6}};

      a是一個(gè)數(shù)組的名字,包含二個(gè)元素:a[0],a[1]。而每個(gè)元素又是一個(gè)一維數(shù)組,每個(gè)一維數(shù)組又包含有三個(gè)元素。如a[0]中的三個(gè)元素分別為a[0][0],a[0][1],a[0][2]。a代表的是二維數(shù)組的首地址。

      3.2函數(shù)的指針

      指針是可以指向一個(gè)函數(shù)的,在編譯時(shí)被分配給一個(gè)入口地址,這個(gè)入口地址就叫做函數(shù)的指針。在一個(gè)程序中,一個(gè)指針變量可以先后指向不同的函數(shù)。

      指向函數(shù)的指針變量定義開式為:

      數(shù)據(jù)類型標(biāo)識(shí)符(*指針變量名)(參數(shù)1,參數(shù)2);

      下面通過例子來說明用指針形式實(shí)現(xiàn)對函數(shù)調(diào)用的方法。

      int max(int a,int b)

      {

      if(a>b)return a;

      else return b;}

      main()

      {

      int max(int a,int b);

      int(*pmax)();

      int x,y,z;

      pmax=max;

      printf("input two numbers:/n");

      scanf("%d%d",&x,&y);

      z=(*pmax)(x,y);

      printf("maxmum=%d",z);

      }

      pmax為函數(shù)指針變量,并把函數(shù)入口地址賦給該函數(shù)指針變量,pmax=max。調(diào)用函數(shù)的形式:(*指針變量名)(參數(shù)表)其中的*號(hào)不是求值運(yùn)算,它只是一種表示符號(hào)。如本程序中的z=(*pmax)(x,y);值得注意的是:函數(shù)指針變量與數(shù)組指針變量是不相同的,數(shù)組指針變量加減一個(gè)整數(shù)可使指針移動(dòng)指向后面或前面的數(shù)組,而函數(shù)指針是沒有移動(dòng)的意義的

      4總結(jié)

      C語言指針對于初學(xué)者來說是一個(gè)短時(shí)間內(nèi)很難掌握的問題,指針靈活性較大,對于剛開始學(xué)習(xí)的學(xué)生,要搞清楚指針的各個(gè)方面內(nèi)容,例如:指針類型、指針?biāo)赶虻念愋?、指針?biāo)赶虻膬?nèi)存區(qū),還有指針?biāo)紦?jù)的內(nèi)存區(qū)等基礎(chǔ)方面內(nèi)容。在多思考、多注重比較和多上機(jī)實(shí)踐,才能真正的掌握好指針課程。

      參考文獻(xiàn):

      [1]譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2000.

      猜你喜歡
      指針變量
      抓住不變量解題
      垂懸指針檢測與防御方法*
      也談分離變量
      偷指針的人
      為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動(dòng)
      素變量混合冪丟番圖逼近
      SL(3,3n)和SU(3,3n)的第一Cartan不變量
      基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
      電測與儀表(2015年5期)2015-04-09 11:30:42
      分離變量法:常見的通性通法
      ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
      肇东市| 光山县| 巴南区| 新乡县| 永寿县| 东阳市| 玉溪市| 朔州市| 绥化市| 北票市| 红安县| 会泽县| 玉树县| 辽宁省| 临沭县| 重庆市| 贵州省| 永寿县| 噶尔县| 凤翔县| 吉隆县| 七台河市| 海原县| 南充市| 荔波县| 义马市| 竹溪县| 上饶市| 禄劝| 镶黄旗| 淮北市| 武陟县| 长宁县| 临泽县| 苏尼特右旗| 洞口县| 南安市| 融水| 红原县| 清流县| 宝坻区|