c/c++中有兩個非常容易混淆的十分常用的但是又特別不引起人注意的兩個概念,指標陣列和陣列指標,或許你已經對這兩個概念早有耳聞,但是不知你有沒有對他們做過細緻的分析來區別二者呢?
陣列指標
一:陣列指標:陣列名本身就是乙個指標,指向陣列的首位址。注意這是宣告定長陣列時,其陣列名指向的陣列首位址是常量。而宣告陣列並使某個指標指向其值指向某個陣列的位址(不一定是首位址),指標取值可以改變。
二:陣列指標:是指向陣列的乙個指標,如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...