陣列
在談到陣列的時候,我們需要記住一句話:陣列名是指標變數,儲存陣列首元素的位址
一維陣列:在c89標準中,陣列是不可以用陣列名來表示的,我們需要注意的是在定義陣列的時候要定義陣列的長度
#define max_size 1024
int a[max_size]=;
printf(「a=%p\n」,a);//列印陣列首元素位址
printf(「&a=%p\n」,&a);//列印陣列的位址
舉例說明
二維陣列:在二維陣列這裡我們特別需要注意的是,二維陣列在定義時可以省略行但是不可以省略列。在這裡我們再來畫一張二維陣列的位址圖,方便大家理解。
我們來舉個例子,大家可以試著跟著一起思考一下
假設a是乙個二維陣列,那*(*(a+i)+j)代表什麼意思呢?
我們一步步來解釋:
*(a+i):第i+1個一維陣列首元素的位址
*(*(a+i)+j):第i+1個一維陣列第j+1個元素的值
解決了一維陣列和二維陣列的位址問題,那麼三維陣列就很簡單了
我們可以很快的推斷出三維陣列名等於該三維陣列的首個二維陣列的位址
假設b是乙個三維陣列,那麼*(*(*(b+i)+j)+k)代表什麼意思呢?
我們再來一步步看:
*(*(*(b+i)+j)+k):第i+1個二維陣列的第j+1個一維陣列第k+1個元素的值
解決了陣列位址取值的問題,我們需要注意的另一點就是在函式傳參時需要注意的幾個問題
1、陣列傳參傳陣列名時會自動退化為指標
2、傳一維陣列名,用元素指標來接
3、傳二維陣列名,用一維陣列的指標來接
4、傳三維陣列名,用二維陣列的指標來接
5、傳指標陣列,用指標的指標來接(在這要特別注意野指標的問題)
既然談到指標與陣列,我們來講幾點指標與陣列的區別
1、
空間分配:陣列是靜態分配,指標是動態分配
2、
安全性:陣列容易越界,指標容易記憶體洩漏
3、
函式傳參:都轉化為指標傳參
4、
訪問效率:陣列是直接訪問(效率高),指標是間接訪問
5、 指標偏向於位址的處理,陣列偏向於值的處理
6、 陣列的分配空間是連續的,而指標不一定
指標與陣列,指標陣列 陣列指標
int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...
指標陣列與陣列指標
1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...
指標陣列與陣列指標
呵呵,實在是厭倦了繞口的解釋。指標陣列,故名思義,就是指標的陣列,陣列的元素是指標 陣列指標,同樣,就是直想陣列的指標。簡單舉例說明 int p 2 首先宣告了乙個陣列,陣列的元素是int型的指標。int p 2 宣告了乙個指標,指向了乙個有兩個int元素的陣列。其實這兩種寫法主要是因為運算子的優先...