指針與數組複習

        可用指針變量來訪問數組中任一元素,通常將數組的首地址稱爲數組的指針,而將指向數組元素的指針變量稱爲指向數組的指針變量。使用指向數組的指針變量來處理數組中的元素,不僅可使程序緊湊,而且還可提高程序的運算速率。

1 .一維數組與指針

1.1數組指針
  數組的首地址稱爲數組指針。若定義整型數組a[5],系統爲數組分配的地址從1000到1019(隨機分配),則數組a的首地址1000爲數組a的數組指針。數組的首地址可用數組名a表示,因此,數組a的數組指針=a=&a[0]。

1.2數組指針變量

存放數組元素地址的變量稱爲數組指針變量。如: 
  int a[5];
  int *p=&a[0];
  則p爲數組指針變量。數組名a可用於表示數組的首地址,所以數組名a可作爲數組指針使用。因此:p=a與p=&a[0] 的作用是相同的。但數組名a不能用來進行賦值運算、"++"、"- -"等運算。
  當指針變量指向數組首地址後,就可使用該指針變量對數組中任何一個元素變量進行存取操作。

訪問數組元素值有三種方法:

(1)通過移動指針變量,依次訪問數組元素。

(2)指針變量不變,用p+i或 a+i 訪問數組第i個元素。

(3)以指針變量名作爲數組名訪問數組元素。

1.3 數組元素的引用 

  綜上所述,對一維數組a[ ]而言,當p=a後,有如下等同關係成立:
  ① p+i=a+i=&a[i],即p+i、a+i 均表示第i個元素的地址&a[i]。
  ② *(p+i) =*(a+i)=p[i]= a[i]。即*(p+i), *(a+i), p[i]均表示第i個元素值a[i]。
  其中p[i] 的運行效率最高。
  由上所述可知:一維數組的第i個元素可用四種方式引用,即: a[i]、*(p+i) 、*(a+i)、p[i]。

2  二維數組與指針

        二維數組元素值在內存中是按行的順序存放的。若定義二維整型數組a[3][3],假設編譯系統爲數組a分配的內存空間從1000開始到1035爲止。因此,與一維數組類似,可用指針變量來訪問二維數組元素。

        二維數組各元素按行排列可寫成矩陣形式,若將第i行中的元素a[i][0]、a[i][1]、a[i][2]組成一維數組a[i] (i=0,1,2),則二維數組a[3][3]可看成是由三個一維數組元素a[0]、a[1]、a[2]組成。即:a[3][3]=(a[0],a[1],a[2]),其中:a[0]、a[1]、a[2]是分別表示二維數組a[3][3]的第0、1、2行元素。

即:a[0]=(a[0][0],a[0][1],a[0][2])
  a[1]=(a[1][0],a[1][1],a[1][2])
  a[2]=(a[2][0],a[2][1],a[2][2])
  因爲數組名可用來表示數組的首地址,所以一維數組名a[i]可表示一維數組 (a[i][0],a[i][1],a[i][2])的首地址&a[i][0],即可表示第i行元素的首地址。因此,二維數組a中第i行首地址(即第i行第0列元素地址)可用a[i]表示。
  一維數組的第i個元素地址可表示爲:數組名+i。因此一維數組a[i]中第j個元素a[i][j]地址可表示爲:a[i]+j ,即:二維數組a中第i行第j列元素a[i][j]的地址可用a[i]+j來表示,而元素a[i]][j]的值爲:*(a[i]+j)。

二維數組的元素地址與元素值

知道了二維數組的行地址與行首地址後,可以討論二維數組的元素地址。
  因爲 a[i]=*&a[i]= *(a+i),所以 *(a+i) 可以表示第 i行的首地址。因此二維數組第i行首地址有三種表示方法:a[i] 、*(a+i)、&a[i][0]。
  由此可推知:第i行第j列元素a[i][j]的地址有四種表示方法:
  a[i]+j 、*(a+i)+j、&a[i][0]+j、&a[i][j]
  而第i行第j列元素a[i][j]值也有四種表示方法:
  *(a[i]+j) 、 *(*(a+i)+j)、*(&a[i][0]+j)、a[i][j]
  
  二維數組a的行地址、行首地址、元素地址、元素值的各種表示方式:
  第i行行地址 :a+i、&a[i]
  第i行首地址(第i行第0列地址): a[i]、 *(a+i)、 &a[i][0]
  元素a[i][j]的地址: a[i]+j 、*(a+i)+j 、&a[i][0]+j、&a[i][j]
  第i行第j列元素值: *(a[i]+j) 、 *(*(a+i)+j) 、 *(&a[i][0]+j)、a[i][j]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章