c/c++中有兩個很easy混淆的十分經常使用的可是又特別不引起人注意的兩個概念,指標陣列和陣列指標,也許你已經對這兩個概念早有耳聞,可是不知你有沒有對他們做過仔細的分析來差別二者呢?
陣列指標
一:陣列指標:陣列名本身就是乙個指標,指向陣列的首位址。注意這是宣告定長陣列時,其陣列名指向的陣列首位址是常量。而宣告陣列並使某個指標指向其值指向某個陣列的位址(不一定是首位址),指標取值能夠改變。
二:陣列指標:是指向陣列的乙個指標,如int (*p)[10] 表示乙個指向10個int元素的陣列的乙個針。
指標陣列
乙個陣列,若其元素均為指標型別資料,稱為指標陣列。 也就是說,指標陣列中每個元素都相當於乙個指標變數。其具體形式應該例如以下: *a[0], ...*a[n]. 每個陣列裡面儲存的是其指向的位址;一維指標陣列的定義形式為:型別名 *陣列名[陣列長度]
比如:int *p[4],因為比*優先順序更高,因此p先與[4]結合,形成p[4]的形式,這顯然是陣列形式。然後再與p前面的*結合,*表示此陣列是指標型別的,每乙個陣列元素都指向乙個整型變數。
demo:
從上面的對照分析中我們能夠清楚的知道二者的差別,關鍵就在於*和優先順序上的問題,以下通過乙個樣例來分析一下。
宣告 char *ponitarray = ; 由定義知這是乙個指標陣列,那麼sizeof(pointarray)=?呢,由於pointarray是乙個存放指標的陣列,而存放指標事實上存放的是位址,一般用4個位元組表示,而陣列大小為4,故而結果就為4*4 = 16.
char (*arraypoint)[4];
char t[4]="123";
arraypoint=&t;
cout<<"*a = "<<*arraypoint<<"\ta = "<上面幾行**輸出結果應該是什麼呢?,首先arraypoint是乙個指標,指向乙個存放4個字元的c風格字串,從這裡我們能夠知道arraypoint事實上是乙個32位(一般)的整數,全部下一步我們要將乙個長度為4的字串位址賦給該指標,即arraypoint=&t;,故可知輸出結果就為「123」和字串t的位址。
陣列,指標,指標陣列,陣列指標
指標是在32位系統下佔四個位元組,64位系統下佔八個位元組的一種型別,指標指向的內容可以是常量,變數,函式,結構體,指標本身,陣列,等等.一級指標 一級指標常常在函式傳參時使用,可傳的引數有一維陣列,常量指標,函式指標等等都可以 但我們要注意不要在函式中,通過改變形參的指向來達到改變實參指向的效果,...
指標, 指標的指標, 陣列, 指標陣列, 陣列指標
指標 int a 10 int p a 指標的指標 int b 20 int p b int p2p p 簡單陣列 int c 10 整數陣列,含有10個整數元素 也就是說每乙個元素都是整數 指標陣列 int p 10 指標陣列,含有10個指標元素 也就是說每乙個元素都是指標 陣列指標 int p ...
指標,陣列指標,指標陣列
1.指標 指標可以看成乙個變數,指標所佔記憶體的大小和處理器的定址空間大小有關,32位處理器指標大小為4個位元組,64位處理指標大小為8個位元組。int p 定義乙個int型別的指標,p就可以看成乙個變數,p的值為0,表示p指向0位址 p也是占用記憶體的,編譯器在棧上為p分配記憶體,儲存p的值0,0...