一個變量有一個地址,一個數組包含若干元素,每個數組元素都在內存中佔用存儲單元,他們都有相應的地址,所謂數組的指針是指數組的其實地址,數組元素的指針是數組元素的地址。
一個數組是有連續的一塊內存單元組成的。數組名就是這塊連續內存單元的首地址。一個數組也是由各個數組元素(下標變量)組成的。每個數組預元素按其類型不同佔有幾個連續的內存單元。一個數組元素的首地址也是指它所佔有的幾個內存單元的首地址。
定義一個指向數組元素的指針變量的方法,與以前介紹的指針變量相同。例如:
int a[10]; //定義一個長度爲10的整形數組。 int *p; //定義一個指向整形變量的指針。
應當注意,因爲數組類型爲int,所以指針變量也應爲指向int型的指針變量。下面是對指針變量賦值:
p=&a[0];
把a[0]元素的地址賦給指針變量p。也就是說,p指向a數組的第0號元素。
C語言規定,數組名代表數組的首地址,也就是第0號元素的地址。因此,下面倆個語句等價:
p=&a[0]; p=a;
在定義指針變量時可以賦給初值:
int *p=&a[0];
它等效於:
int *p; p=&a[0];
當然也可以寫成:
int *p=a;
從圖中我們可以看出有以下關係,p、a、&a[0]均指向同一單元,他們是數組a的首地址,也是0號元素a[0]的首地址。應該說明的是p是變量,而a、&a[0]都是常量。在編程時應予以注意。
數組指針變量說明的一般形式爲:
類型說明符 *指針變量名;
其中類型說明符表示所指數組的類型。從一般形式可以看出指向數組的指針變量和指向普通變量的指針變量的說明是相同的。