可用指標變數來訪問陣列中任一元素,通常將陣列的首位址稱為陣列的指標,而將指向陣列元素的指標變數稱為指向陣列的指標變數。使用指向陣列的指標變數來處理陣列中的元素,不僅可使程式緊湊,而且還可提高程式的運算速率。
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)。
二維陣列的元素位址與元素值
校招筆試複習 指標陣列與陣列指標
一 先看一組定義 1.乙個整型數 int a 2.乙個指向整型數的指標 int a 3.乙個指向指標的指標,它指向的指標指向乙個整型數 int a 4.乙個有5個整型數的陣列 int a 5 5.乙個有5個指標的陣列,該指標指向乙個整型數 int a 5 6.乙個指向有5個整型數陣列的指標 int ...
指標與陣列,指標陣列 陣列指標
int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...
C語言複習(十五) 陣列指標和指標陣列
看如下 int array 5 int matrix 2 3 int pa array int pb matrix 思考問題 都知道,一位陣列名array 代表陣列首元素位址,那麼二維陣列名 matrix 代表什麼?也是首元素位址麼?array和 array 的值相同,它們的意義不同,表現在它們的指...