指標和陣列關係密切。不帶下標的陣列名實際上就是指向陣列第乙個元素的指標。char p[0],以下兩句完全等價:p, &p[0]。換言之,也就是:p == &p[0]為真,因為陣列第一元素的位址也就是陣列的位址。觀察下面程式,p1和p2實際指向同乙個記憶體位址。
在指向某陣列元素的指標上加或減去乙個整數,就可以指向另乙個陣列元素,但不能越界,即超出該陣列的範圍。在指標上進行的加減運算,必須指向同乙個陣列,或陣列儲存空間的下乙個單元。比如p=a+10是非法的,因為a只有5個元素。而p=a+5,雖然a的元素是a[0]-a[4],但p可以指向陣列儲存空間的下乙個單元。
引用陣列元素,既可以用下標的方式,即a[i],也可以用指標的方式,即*(a+i)或*p。
沒有下標的陣列名稱為指標,反之,任何指標變數也可以取下標,就像變數宣告成陣列一樣。例如:
int *p, i[10];
p=i;
i[5]=100; //用陣列名加下標賦值
p[5]=100; //用指標加下標賦值
*(p+5)=100; //用指標運算賦值
上述3個賦值語句等價,都將100這個值賦到陣列第6個元素中。其中第二種是對p進行下標操作,第3句是使用指標運算。
c語言提供訪問陣列有兩種方法:指標運算和陣列下標。程式中經常通過指標運算訪問陣列,原因在於指標運算一般快於陣列下標。因為程式設計中常常考慮速度因素,c程式設計師一般都用指標訪問陣列元素。
//以不同的方式輸出陣列的所有元素的值
#include int main(int argc, char *argv)
{ int a[10],i,*p=null;
for(i=0;i<10;i++)
a[i]=i;
//第一種:引用陣列下標
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
//第二種:借助陣列首元素構造的指標
for(i=0;i<10;i++)
printf("%d ",*(a+i);
printf("\n");
//第三種:指標
for(p=a;p
c語言中的指標和陣列
最近在複習c語言,看了c primer plus 這本書,對其中難以理解的陣列和指標有一些自己小小的體會,現記錄下來。指標和一維陣列 include int urn 5 int main void 輸出結果如下 pointer value,dereferenced pointer,pointer a...
C語言中的指標和陣列
下面的內容節選自由我所執筆的會議記錄。對於本文的不足之處,各位可以提出自己的看法。q1 指標和陣列到底是怎麼一回事?a 指標和陣列有本質的不同。指標就是乙個記憶體位址,在32位系統下,乙個指標永遠佔4個位元組 陣列是一塊連續的記憶體空間,我們從乙個已定義的陣列中可以獲得陣列大小以及這塊連續記憶體空間...
C語言中指標和陣列
首先,明確乙個概念,指標是什麼,一旦提到這個老生常談且富有爭議性的話題,那真是1000個人有1000種看法。在國內的很多教材中,給出的定義一般就是 指標就是位址 從初步理解指標的角度來說,這種說法是最容易理解的,但是這種說法明顯有它的缺陷所在。指標就是位址 這種說法相當於 指標 字面值位址 或者說乙...