首先請看乙個小例子:
程式:
int x[10]; int *p = x;
cout << sizeof(x) / sizeof(*x) << endl; //x為陣列(陣列長度為40位元組),*x為陣列的乙個數(4位元組)
cout << sizeof(p) / sizeof(*p) << endl; //p為指標,*p為陣列的乙個數(32位系統中指標和int數都是4個位元組)
結果是
10 1
分析:陣列和指標的區別
陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。
指標可以隨時指向任意型別的記憶體塊。
(1)修改內容上的差別
char a = 「hello」;
a[0] = 『x』;
char *p = 「world」; // 注意p 指向常量字串
p[0] = 『x』; // 編譯器不能發現該錯誤,執行時錯誤
(2) 用運算子sizeof 可以計算出陣列的容量(位元組數)。
sizeof(p),p 為指標得到的是乙個指標變數的位元組數,而不是p 所指的記憶體容量。c++/c 語言沒有辦法知道指標所指的記憶體容量,除非在申請記憶體時記住它。注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。
char a = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12 位元組
cout<< sizeof(p) << endl; // 4 位元組
計算陣列和指標的記憶體容量
void func(char a[100])
陣列指標和指標陣列的區別
陣列指標 也稱行指標 定義 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 該語句是定義乙個陣列指標,指向...