指標和陣列:
乙個變數有位址,乙個陣列同樣有位址。不同的是,乙個陣列包含有若干個元素,每個元素都要佔據記憶體空間,且陣列佔據的記憶體空間也是連續的。指標變數也可以指向陣列。
因此,在引用陣列元素的時候,可以用下標法( 如a[6]),也可以使用指標法,
通過指向陣列元素的指標找到所需的元素。使用指標法能夠使目標程式質量高: 佔記憶體少,執行速度高。
乙個變數有位址,乙個陣列元素包含若干個陣列元素,每個陣列元素都在記憶體中占用儲存單元,
它們都有相應的位址,這個位址就可以用指標來實現儲存。
如:int a[5];
int *p,*q;
p=&a[0];
q=&a[2];
*p=5;*q=8;
定義陣列元素的指標變數的方法與定義指向變數的指標變數方法相同。
如:int a[10],*b; b=&a[5];
tips:c語言規定:陣列名代表陣列的首位址,也就是代表第乙個元素a[0]的位址。
p=a; //p=&a[0];
p+1 ~ &a[1]
*(p+1) ~ a[1]
指標陣列、陣列指標、指向指標的指標:
1、指標陣列:
形如:int * p[10]; //乙個指標陣列,陣列裡面有10個元素,每乙個元素都是乙個int型的指標
陣列內的每乙個元素都是乙個指標變數(這時注意每個元素所佔的記憶體單元大小是位址的長度而不是型別長度)
也稱作行指標,該指標指向了乙個長度為10的陣列的行首位址;
*(b) = b[0][0]; *(b+1) = b[1][0]; *(*(b+i)+j) = b[i][j]
該指標大小也是取決於作業系統,它跟一級指標其實本質上是沒有差別的,只是說是有連環指向的這種感覺。
c是指向指標的指標,因此它使用間接取址符時需要兩次才能取出目標的內容。
c == &p[0]; // 指標陣列中第乙個指標元素的位址
*c == p[0]; // 指標陣列中第乙個指標元素位址的內容,即目標變數的位址
**c == *p[0]; // 指標陣列中第乙個指標元素指向的目標變數值
總結:指向指標的指標,可以這樣理解,首先指向指標的指標可以把他看成一種特殊的變數,既然是變數就可以儲存不同的元素,比如整形變數int a,a可以儲存2,3,4這種普通的整型資料,只要將值付給a就行了,但指向指標的指標所存的元素比較特殊,存放的元素一般是存放位址的指標變數,比如我有三個指標變數,int *p1,*p2,*p3,那麼我可以定義乙個特殊的變數 int **p,我可以將p1的位址付給p,也可以將p2的位址付給p.比如p=&p1,(類似於int a,int *t,t=&a),那麼p就代表了他所指向的變數p1或者p2的位址,而p所指向的變數是乙個指標變數,*p代表著這個指標變數裡面的值(注意值實際上是乙個位址),**p代表著它所指向的指標變數的內容(位址)所指向的儲存單元的內容(數值)。
指標陣列和陣列指標
有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...
指標陣列和陣列指標
理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...
指標陣列和陣列指標
該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...