1. 一維陣列與指標
* 陣列指標
陣列的首位址稱為陣列指標。若定義整型陣列a[5],系統為陣列分配的位址從1000到1019,則陣列a的首位址1000為陣列a的陣列指標。
c++規定,陣列的首位址可用陣列名a表示,因此,陣列a的陣列指標=a=&a[0]。
* 陣列指標變數
int a[5];
int *p=&a[0];
則p為陣列指標變數。
但陣列名a不能用來進行賦值運算、"++"、"- -"等運算。
當指標變數指向陣列首位址後,就可使用該指標變數對陣列中任何乙個元素變數進行訪問操作。
# include
void main( void)
,i,j,*p,n=5;
p=a;
for (i=0;icout
<<*p<<'\t';
p++;
} cout
<<*(p+i)<< '\t';
cout
<<*(a+i)<< '\t';
cout
<'\t';
cout
<012
3401
2340
1234
0123
4
(1)通過移動指標變數,依次訪問陣列元素。如:
p=a;
for (i=0;i
i++)
注意:cout<<*p<<'\t'; p++;可合併為一條語句:cout<<*p++<<'\t';
(2)指標變數不變,用p+i或 a+i 訪問陣列第i個元素。如:
for (i=0;i
i++) cout <<*(p+i)<< '\t';
for (i=0;i
i++) cout <<*(a+i)<< '\t';
在c++中允許用p+i 或a+i 表示第i 個元素的位址。因此,*(p+i)與*(a+i)均表示第i個元素的內容。
(3)以指標變數名作為陣列名訪問陣列元素。如:
for (i=0;ip作為陣列名,則p
[i]表示陣列的第i個元素a
[i]。
* 陣列元素的引用
綜上所述,對一維陣列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.二維陣列與指標
* 二維陣列元素在記憶體中的存放方式
在c++中,二維陣列元素值在記憶體中是按行的順序存放的。
* 二維陣列行首位址
二維陣列各元素按行排列可寫成
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行元素的首位址。
* 二維陣列行位址
為了區別陣列指標與指向一維陣列的指標,c++引入了行位址的概念,並規定二維陣列a中第i行位址用a+i或&a[i]表示,
a+i=&a[i]=a[i]=&a[i][0]
int a[3][3];
int *p=a+0;
int *p=(int *) (a+0);
二維陣列名a可用於表示二維陣列的首位址,但c++規定該首位址並不是二維陣列中第0行第0列的位址(即a≠a[0][0]),
而是第0 行的行位址,即a=a+0=&a[0]。
* 二維陣列的元素位址與元素值
知道了二維陣列的行位址與行首位址後,可以討論二維陣列的元素位址。
a[i]+j 、*(a+i)+j、&a[i][0]+j、&a[i][j]
第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]
最後總結例子:
# include void main(void)
,,};
for (int i=0
;i<3;i++)} }
程式執行後輸出結果為:
&a[0]= 0x0065fdd4=0x0065fdd4
a[0]= 0x0065fdd4=0x0065fdd4=0x0065fdd4
&a[0][0]= 0x0065fdd4=0x0065fdd4=0x0065fdd4=0x0065fdd4
a[0][0]=1=1=1=1
&a[0][1]= 0x0065fdd8=0x0065fdd8=0x0065fdd8=0x0065fdd8
a[0][1]=2=2=2=2
&a[0][2]= 0x0065fddc=0x0065fddc=0x0065fddc=0x0065fddc
a[0][2]=3=3=3=3
&a[1]= 0x0065fde0=0x0065fde0
a[1]= 0x0065fde0=0x0065fde0=0x0065fde0
&a[1][0]= 0x0065fde0=0x0065fde0=0x0065fde0=0x0065fde0
a[1][0]=4=4=4=4
&a[1][1]= 0x0065fde4=0x0065fde4=0x0065fde4=0x0065fde4
a[1][1]=5=5=5=5
&a[1][2]= 0x0065fde8=0x0065fde8=0x0065fde8=0x0065fde8
a[1][2]=6=6=6=6
&a[2]= 0x0065fdec=0x0065fdec
a[2]= 0x0065fdec=0x0065fdec=0x0065fdec
&a[2][0]= 0x0065fdec=0x0065fdec=0x0065fdec=0x0065fdec
a[2][0]=7=7=7=7
&a[2][1]= 0x0065fdf0=0x0065fdf0=0x0065fdf0=0x0065fdf0
a[2][1]=8=8=8=8
&a[2][2]= 0x0065fdf4=0x0065fdf4=0x0065fdf4=0x0065fdf4
a[2][2]=9=9=9=9
C 指標陣列與陣列指標
說實話,c語言真的很讓人蛋疼,它不像物件導向的語言,我們重心在設計程式上。而使用c語言,你不僅要考慮程式的設計,你還要考慮很多他的使用細節,不然一不小心你怎麼死的都不知道。但是,個人感覺,c語言的魅力是其他任何語言都比不了的!繼續看。陣列指標 範例 typedef int aint5 5 typed...
C 指標陣列與陣列指標
陣列指標 也稱行指標 陣列指標 a pointer to an array,即指向陣列的指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣...
指標陣列與陣列指標 C
關於陣列指標 1 對於二維陣列,初始化時,必須指定乙個引數 int a 3 int a 這樣是不允許的,因為要確定指標移動一步要走多遠。對於一位陣列int a 這樣可以。也就數說只有乙個引數位置可以不用設定引數。2 int p 3 必須加上小括號,這代表乙個指向陣列的指標,數字3,代表每一列有三個數...