• 
    

    
    

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

      談C語言中指針、地址和數(shù)組的相互關(guān)系

      2009-03-02 09:33:14劉林香許燕青江忠君
      新媒體研究 2009年2期
      關(guān)鍵詞:標識符數(shù)組指針

      劉林香 許燕青 江忠君

      [摘要]在學習C語言過程中,指針、地址和數(shù)組是最富有特色的內(nèi)容,特別是指針、地址和數(shù)組之間相互關(guān)系更具有特色。掌握它們之間的相互關(guān)系將有助于C語言其他內(nèi)容的學習,因此學好這部分內(nèi)容是掌握C語言的關(guān)鍵。主要用圖示法闡述指針和地址、指針和數(shù)組之間的聯(lián)系。

      [關(guān)鍵詞]C語言 指針 地址 數(shù)組 圖示法

      中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0120049-01

      指針是C語言中一個最重要概念之一,指針變量是用來存放另外一個變量地址,通過指針變量可以間接引用另外一個變量的內(nèi)容。數(shù)組是由若干個元素按一定順序關(guān)系組合而成的集合體,即數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型,數(shù)組名則是數(shù)組元素的首地址,用戶在編程中用一個數(shù)組名和下標來唯一確定數(shù)組中的每一個元素。所以,指針、地址和數(shù)組以及它們之間的相互關(guān)系構(gòu)成C語言最有特色部分。

      一、指針和地址

      (一)指針變量的定義

      在程序中定義了一個變量,那么在計算機內(nèi)不僅定義了該變量的類型、名稱,而且還在內(nèi)存中分配了一塊存儲區(qū)域,這塊存儲區(qū)域的首地址稱為該變量的指針。變量的值就存放在這塊區(qū)域之中,在計算機內(nèi)部,通過訪問或修改這塊區(qū)域的內(nèi)容來訪問或修改相應(yīng)的變量。Turbo C語言中,對于變量的訪問形式之一,就是先求出變量的地址,然后再通過地址對它進行訪問。

      指針變量的一般定義為:

      類型標識符*標識符;

      其中“標識符”是指針變量的名字,標識符前加了“*”號,表示該變量是指針變量,而最前面的“類型標識符”表示該指針變量所指向的變量的類型。一個指針變量只能指向同一種類型的變量,也就是說,我們不能定義一個指針變量,既能指向一整型變量又能指向雙精度變量。如定義了一個指針變量int*ip;說明該指針變量ip為指向整數(shù)的指針,用它存放整型變量的地址。

      (二)指針變量的引用

      指針變量中只能存放地址,因此,在使用中不能將一個整數(shù)賦給一指針變量。如:

      int *ip;ip=80;這種賦值是錯誤的??梢赃@樣定義:

      int i=100,x;int *ip;

      定義了兩個整型變量i,x,還定義了一個指向整數(shù)的指針變量ip。i,x中可存放整數(shù),而ip中只能存放整型變量的地址。通過地址運算“&”可以把i的地址賦給ip:

      ip=&i

      此時指針變量ip就指向整型變量i,假設(shè)變量i的地址為1600,這個賦值可理解為圖1所示的聯(lián)系。

      可以通過指針變量ip間接訪問變量i,如:

      x=*ip;

      運算符*訪問以ip為地址的存儲區(qū)域,而ip中存放的是變量i的地址,因此,*ip訪問的是地址為1600的存儲區(qū)域,它就是i所占用的存儲區(qū)域,所以上面的賦值表達式等價于

      x=i;

      另外,指針變量和一般變量一樣,存放在它們之中的值是可以改變的,也就是說可以改變它們的指向,假設(shè)

      Int i,j,*p1,*p2;

      i=10 ;

      j=20 ;

      p1=&i

      p2=&j

      通過圖示法闡述如下:

      如圖2所示,采用圖示法展示出普通變量i、j和指針變量p1、p2之間的關(guān)系,指針其實是內(nèi)存地址,而內(nèi)存中的單元是按字節(jié)編址(每個地址編碼對應(yīng)一個字節(jié)空間),從圖中可以看出整型變量i和j分別占用兩個字節(jié)的內(nèi)存空間。同時也可以看出每個指針變量也是占用兩個字節(jié)的空間,因為每個指針變量都是存儲一個地址碼。

      通過指針訪問它所指向變量的值是以間接訪問的形式進行的,所以比直接訪問一個變量要多費時間,而且不直觀,因為通過指針要訪問哪一個變量,取決于指針的值(即指向),例如“*p2=*p1;”實際上就是“j=i;”,前者不僅速度慢而且目的不明。但由于指針是變量,可以通過改變它們的指向,以間接訪問不同的變量的值,這給程序員帶來靈活性,也使程序代碼編寫得更為簡潔、高效。

      二、指針和數(shù)組

      指針和數(shù)組有著密切的關(guān)系,任何能由數(shù)組下標完成的操作也都可用指針來實現(xiàn),而且使用指針處理數(shù)據(jù),有助于產(chǎn)生占用空間小,運行速度快且高質(zhì)量的目標代碼。

      (一)指向數(shù)組元素的指針

      在C語言中,數(shù)組的指針就是數(shù)組的起始地址(也就第一個元素的地址),如:

      int a[10],*p;

      對于數(shù)組a[i]表示數(shù)組a的第i+1個變量,a是數(shù)組名表示該數(shù)組的首地址,為常量,即a與&a[0]等價,而p=a則將數(shù)組a的首地址&a[0]賦給指針變量p。通過p來訪問數(shù)組元素時要注意以下問題:

      1.P,a與&a[0]它們是等價的,都表示數(shù)組a的首地址。

      2.p[i]和a[i]都是代表該數(shù)組的第i+1個元素。

      3.p+i和a+i代表了第i+1個元素的地址,所以我們也可以使用*(p+i)和*(a+i)來引用對象元素。

      4.表達式p+1為指向p的下一個存儲單元,即a[0]下一個元素a[1]的存儲單元,也就是p+1等價于&a[1]。

      (二)指向二維數(shù)組的指針

      為了說明問題,假設(shè)有如下程序段:

      int a[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}},i,j,*p;

      P=&a[0][0];

      A為二維數(shù)組名,此數(shù)組有3行5列,共15個元素。也可這樣來理解,數(shù)組a由三個元素組成:a[0],a[1],a[2]。而每個元素又是一個一維數(shù)組,且都含有5個元素(相當于5列),例如,a[0]所代表的一維數(shù)組所包含的5個元素為a[0][0],a[0][1],a[0][2],a[0][3],a[0][4]。數(shù)組名a也代表二維數(shù)組的首地址,也可看成是二維數(shù)組第0行的首地址。a+1就代表第1行的首地址,a+2就代表第2行的首地址。如果此二維數(shù)組的首地址為1000,由于第0行有5個整型元素,所以a+1為1010,a+2也就為1020,如圖3所示。

      把a[0],a[1],a[2]看成是一維數(shù)組名,可以認為它們分別代表它們所對應(yīng)的數(shù)組的首地址,也就是講,a[0]代表第0行中第0列元素的地址,即&a[0][0],a[1]是第1行中第0列元素的地址,即&a[1][0],根據(jù)地址運算規(guī)則,a[0]+1即代表第0行第1列元素的地址,即&a[0][1],a[i]+j即代表第i行第j列元素的地址,即&a[i][j]。將指針p指向二維數(shù)組a的首地址,p+1就指向下一個元素,由于每行5個元素,p+i*5+j就是第i行第j列元素的地址。

      參考文獻:

      [1]譚浩強,C程序設(shè)計(第二版),北京:清華大學出版社,1999.

      [2]嚴桂蘭,C語言程序設(shè)計與應(yīng)用教程,福建:廈門大學出版社,2001.

      猜你喜歡
      標識符數(shù)組指針
      淺析5G V2X 通信應(yīng)用現(xiàn)狀及其側(cè)鏈路標識符更新技術(shù)
      基于底層虛擬機的標識符混淆方法
      JAVA稀疏矩陣算法
      電腦報(2022年13期)2022-04-12 00:32:38
      JAVA玩轉(zhuǎn)數(shù)學之二維數(shù)組排序
      電腦報(2020年24期)2020-07-15 06:12:41
      基于區(qū)塊鏈的持久標識符系統(tǒng)①
      偷指針的人
      娃娃畫報(2019年5期)2019-06-17 16:58:10
      為什么表的指針都按照順時針方向轉(zhuǎn)動
      數(shù)字美術(shù)館“數(shù)字對象唯一標識符系統(tǒng)”建設(shè)需求淺議
      尋找勾股數(shù)組的歷程
      基于改進Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
      電測與儀表(2015年5期)2015-04-09 11:30:42
      海盐县| 南溪县| 科技| 柳河县| 桦甸市| 慈溪市| 当雄县| 横峰县| 安平县| 宁化县| 蒙阴县| 手游| 咸宁市| 怀宁县| 青浦区| 泽普县| 宁武县| 临漳县| 元谋县| 西吉县| 启东市| 根河市| 水富县| 潼关县| 湖州市| 慈利县| 桐乡市| 色达县| 滦南县| 黔江区| 光山县| 益阳市| 通许县| 务川| 车致| 石渠县| 洪泽县| 望城县| 盱眙县| 荣昌县| 新蔡县|