正文 第30章 指針3(1 / 1)

定義一個指向數組元素的指針變量的方法,與以前介紹的定義一個指向變量的指針變量的方法相同,但必須注意的是,其類型必須與數組的數據類型一致。例如:

inta[5]={1,3,5,7,9};

int*pa;/*數組為int型,因此指針變量也應指向int型*/

這裏定義的指針變量pa可以指向數組a的任何一個元素,隻要把該元素的指針賦給它就可以了,請看下麵的實例:

pa=a;/*等價於pa=&a[0];*/

pa=a+2;/*等價於pa=&a[2];*/

第1條語句是使指針變量pa指向數組的第1個元素a[0],第2條語句是使指針變量pa指向數組的第3個元素a[2]。可以在定義指針變量時對它進行初始化。

int*pa=a;

它等價於:

int*pa;

pa=a;

當然也可以這樣定義:

int*pa=&a[0];

它的作用是將數組a的第1個元素的地址賦給指針變量pa。學習了指針後,可以用指針法來訪問數組的元素。例如:

inta[10]={1,3,5,7,9,11,13,15,17,19};

定義了一個長度為10的int型數組a。這個數組的10個元素的指針可以表示為a+i或&a[i](其中i=0,1,2,…,9)。

這樣就可以通過數組元素的指針來引用數組中的元素,即指針法。表示形式為:

*(a+i)(其中i=0,1,2,……,9)

例如:*(a+1)表示a[1],*(a+6)表示a[6]。

其實,下標運算符“[]”實際上是變址運算符,在編譯時,a[i]被處理成*(a+i),即將a的值加上相對偏移量得到要找元素的地址,然後找出該單元的內容。用*(a+i)和a[i]這兩種形式來引用數組中的元素是等價的。

下麵討論通過指向數組元素的指針變量來引用數組中的元素,例如:

inta[10]={1,3,5,7,9,11,13,15,17,19};

int*pa=a+2;

這裏定義了一個指針變量pa,該指針變量指向了數組a的第3個元素。請看涉及pa的表達式的意思。

pa表示a+2或&a[2]。

*pa表示a[2]或*(a+2)。

pa[1]表示*(pa+1),也就是*(a+2+1)等於*(a+3),即a[3]。指向數組的指針變量可以使用下標運算符操作。

pa[-1]表示*(pa+(-1)),也就是*(a+2+(-1))等於*(a+1),即a[1]。

pa++即pa=pa+1,表示將指針變量pa指向下一個元素a[3]。

&pa表示取指針變量pa的地址,與數組元素的指針無關。

*(pa+3)表示*(a+5),即a[5]。

*pa+3表示a[2]+3。

從這些表達式中可以知道用數組名和用指針變量引用數組元素的區別。

[例105]輸出數組中的全部元素。

假設一個整型數組a有10個元素,要輸出各元素的值有三種方法:

(1)下標法

voidmain()

inta[10]={1,2,3,4,5,6,7,8,9,10};

inti;

for(i=0;i