昨天聊了常量指標和指標常量的區別,今天繼續乙個比較容易混淆的話題,指標陣列和陣列指標
含義:指向陣列的的指標
(1)陣列在記憶體中的表示
建立乙個陣列就是在記憶體裡面開闢一塊連續的空間,比如int a[4];就是在記憶體裡面開闢了乙個大小為4*sizeof(int)位元組的記憶體空間。而二維陣列是特殊的一維陣列。
void main()
;//這是乙個2*2的二維陣列
int (*p)[2];//陣列指標
p=a;//令p指向陣列a
}
這裡p是乙個指向陣列的指標。
讓我們理解陣列名和陣列指標變數:a,a[0],a[1],p,a+1,a[0]+1,p+1這些分別代表什麼意思呢?
a是乙個陣列名,型別是指向一維陣列的指標,不是變數,a的值是指標常量,即不能有a++或者a=p這些操作。a指向這塊連續空間的首位址,值是&a[0][0]。
答案:
a[0]是一維陣列名,型別是指向整型的指標,值是&a[0][0],這個值是乙個常量。
a[1]是一維陣列名,型別是指向整型的指標,值是&a[1][0],這個值是乙個常量。
p是乙個陣列指標變數,指向一維陣列的指標變數,值是&a[0][0]。可以執行p++;p=a等操作。
a+1表示指向下一行元素,也可以理解為指向下乙個一維陣列。
*(a+1)是取出第一行的首位址。
a[0]+1是指向第0行第1個元素,也可以理解為指向一維陣列a[0]的第乙個元素。
p+1同a+1
(p+1)同(a+1)
雖然a跟a[0]值是一樣,但型別不一樣,表示的意義不一樣。通過分析就不難理解為什麼((a+i)+j)和a[i][j]等效了。
陣列名與陣列指標變數的區別
區別:陣列名是指標,型別是指向元素型別的指標,但值是指標常量,宣告陣列時編譯器會為宣告所指定的元素數量保留記憶體空間。陣列指標是指向陣列的指標,宣告指標變數時編譯器只為指標本身保留記憶體空間。
指標陣列:乙個存放int型別的陣列稱為整型陣列,那麼存放指標的陣列就叫指標陣列。
#include
void main()
此例陣列p就兩個元素,p[0]是指向i的指標,p[1]是指向j的指標。這兩個指標都是int型指標,所以p是存放int型指標的陣列。sizeof(p)返回陣列占用的總空間,所以程式輸出是8
常用舉例
字元排序,可以用指標陣列指向不字串,排序時改變指標指向就避免了大量文字資料的移動。
指標陣列和陣列指標的區別
這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...
指標陣列和陣列指標的區別
這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...
指標陣列和陣列指標的區別
這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...