指標陣列和陣列指標的區別

2021-08-20 07:08:29 字數 1265 閱讀 4516

昨天聊了常量指標和指標常量的區別,今天繼續乙個比較容易混淆的話題,指標陣列和陣列指標

含義:指向陣列的的指標

(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...