標籤:
------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------
數組指標變數的說明和使用
指向數組的指標變數稱為數組指標變數。 在討論數組指標變數的說明和使用之前,我們先明確幾個關係。 一個數組是由連續的一塊記憶體單元組成的。 數組名就是這塊連續記憶體單元的首地址。一個數組也是由各個數組元素(下標變數) 組成的。每個數組元素按其類型不同佔有幾個連續的記憶體單元。 一個數組元素的首地址也是指它所佔有的幾個記憶體單元的首地址。 一個指標變數既可以指向一個數組,也可以指向一個數組元素, 可把數組名或第一個元素的地址賦予它。如要使指標變數指向第i號元素可以把i元素的首地址賦予它或把數組名加i賦予它。
設有實數組a,指向a的指標變數為pa,從圖6.3中我們可以看出有以下關係: pa,a,&a[0]均指向同一單元,它們是數組a的首地址,也是0 號元素a[0]的首地址。pa+1,a+1,&a[1]均指向1號元素a[1]。類推可知a+i,a+i,&a[i] 指向i號元素a[i]。應該說明的是pa是變數,而a,&a[i]都是常量。在編程時應予以注意。
main(){
int a[5],i;
for(i=0;i<5;i++)
{ a[i]=i;
printf("a[%d]=%d/n",i,a[i]); }
printf("/n"); }
主函數 定義一個整型數組和一個整型變數 迴圈語句 給數組賦值 列印每一個數組的值 ...... 輸出換行 ...... 數組指標變數說明的一般形式為: 類型說明符 * 指標變數名
其中類型說明符表示所指數組的類型。 從一般形式可以看出指向數組的指標變數和指向普通變數的指標變數的說明是相同的。 引入指標變數後,就可以用兩種方法來訪問數組元素了。
第一種方法為下標法,即用a[i]形式訪問數組元素。 在第四章中介紹數組時都是採用這種方法。
第二種方法為指標法,即採用*(pa+i)形式,用間接訪問的方法來訪問數組元素。
main(){
int a[5],i,*pa;
pa=a;
for(i=0;i<5;i++)
{ *pa=i; pa++; }
pa=a;
for(i=0;i<5;i++)
{ printf("a[%d]=%d/n",i,*pa); pa++;
} } 主函數 定義整型數組和指標 將指標pa指向數組a 迴圈 將變數i的值賦給由指標pa指向的a[]的數組單元 將指標pa指向a[]的下一個單元 ...... 指標pa重新取得數組a的首地址 迴圈 用數組方式輸出數組a中的所有元素 將指標pa指向a[]的下一個單元
下面,另舉一例,該例與上例本意相同,但是實現方式不同。
main(){
int a[5],i,*pa=a;
for(i=0;i<5;)
{
*pa=i;
printf("a[%d]=%d/n",i++,*pa++);
} } 主函數 定義整型數組和指標,並使指標指向數組a 迴圈 將變數i的值賦給由指標pa指向的a[]的數組單元 用指標輸出數組a中的所有元素,同時指標pa指向a[]的下一個單元
數組名和數組指標變數作函數參數
在第五章中曾經介紹過用數組名作函數的實參和形參的問題。在學習指標變數之後就更容易理解這個問題了。 數組名就是數組的首地址,實參向形參傳送數組名實際上就是傳送數組的地址, 形參得到該地址後也指向同一數組。 這就好象同一件物品有兩個彼此不同的名稱一樣。同樣,指標變數的值也是地址, 數組指標變數的值即為數組的首地址,當然也可作為函數的參數使用。
float aver(float *pa);
main(){
float sco[5],av,*sp;
int i;
sp=sco;
printf("/ninput 5 scores:/n");
for(i=0;i<5;i++)
scanf("%f",&sco[i]);
av=aver(sp);
printf("average score is %5.2f",av);
}
float aver(float *pa) {
int i;
float av,s=0;
for(i=0;i<5;i++)
s=s+*pa++;
av=s/5;
return av; }
黑馬程式員--C語言中的指標(2)