指標與陣列的區別

2021-07-22 07:17:08 字數 746 閱讀 8045

c++/c程式中,指標和陣列在不少地方都是可以相互替換使用的,這就讓人產生一種錯覺,以為兩者是等價的。

陣列或是在靜態儲存區被建立(全域性陣列),或是在棧上被建立。陣列名對應著,注意不是指向,一塊記憶體,其位址與容量在生命期內保持不變(當然,使用了realloc()的不算),只有陣列的內容可以改變。

指標可以隨時指向任意型別的記憶體塊,它的特徵是「可變」,所以我們常用指標來操作動態記憶體。指標遠比陣列靈活,當然也就更危險。

區別之一:

char a = "hello";

a[0] = 'x';

cout << a << endl;

char *p = "world"; // 注意p指向常量字串

p[0] = 'x'; // compiler不能發現該錯誤,不過在執行的時候會發生runtime error

cout << p << endl; 

區別之二: 

用運算子sizeof可以計算出陣列的容量(位元組數)。比如對應上面的**,sizeof(a)的值是12(包括最後面的'\0')。指標p指向a,但是sizeof(p)的值卻是4。這是因為sizeof(p)得到的是乙個指標變數的位元組數,相當於sizeof(char*),而不是p所指的記憶體容量siziof(char[6])。c++/c不能知道指標所指的記憶體容量。

值得注意的是,當陣列作為函式的引數進行傳遞時,陣列就自動退化為同型別的指標。那麼不論陣列a的容量是多少,sizeof(a)始終等於sizeof(char *)。

收起

陣列指標與指標陣列的區別

一 陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,...

陣列指標與指標陣列的區別

一 陣列指標 也稱行指標 定義int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指...

陣列指標與指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...