指標陣列
指標變數可以同其他變數一樣作為陣列元素,由指標變數組成的陣列成為指標陣列,組成陣列的每個元素都是相同型別的指標。指標陣列常用以處理二維陣列,尤其是字串陣列。用指標陣列處理字串比較靈活,每個字串可以具有不同的長度。
定義 int *p[3] ;
右左原則,先與p結合成為乙個陣列,再由int* 說明這是乙個整形指標陣列,它有3個指標型別的陣列元素。執行p+1時,p指向下乙個陣列元素。
如要將二維陣列賦給一指標陣列:
int *p[3] ; 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]
for ( i = 0 ; i < 3 ; i++ )
p[i] = a[i] ; 要分別賦值。
(p++語句表示p陣列指向下乙個陣列元素。注:此陣列每乙個元素都是乙個指標)
陣列指標
所謂陣列指標也稱指向一維陣列的指標,亦稱行指標。
定義 int (*p)[n] ;
()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。
如要將二維陣列賦給一指標,應這樣賦值:
int a[3][4] ;
int (*p)[4] ; 該語句是定義乙個陣列指標,指向含4個元素的一維陣列。
p = a ; 將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]
p++ ; 該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]
在如下的a指向b、b指向c的指向關係中:
首先 c是」一段內容」,比如你用malloc或者new分配了一塊記憶體,然後塞進去」一段內容」,那就是c了。c的起始位址是0x00000008。
b是乙個指標變數,其中存放著c的位址,但是b也要佔空間的啊,所以b也有位址,b的起始位址是0x00000004,但是b記憶體中存放的是c的位址,所以b裡面的內容就是0x00000008。
那麼到此為止都比較好理解:
b= 0x00000008; //b的內容 ,即c的位址
*b = 「一段內容」; //取b中的內容(c的位址)的值,也就是b指標指向的c的值
&b = 0x00000004; //b取位址,b的位址是0x00000004
那麼,再來看a:
a是二級指標變數,其中存放著b的位址0x00000004,a也有位址,是0x00000000;
*a = b= 0x00000008; //b的內容
**a = *b = 「一段內容」; //b指標指向的c的值
a = &b = 0x00000004; //a存的是b的位址,b的位址是0x00000004
&a = 0x00000000; //a取位址
指標陣列和陣列指標
有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 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本身...