1. 程式人生 > >【C語言】一維陣列、二維陣列與指標

【C語言】一維陣列、二維陣列與指標

一維陣列和指標:
1、一維陣列名:
對於這樣的一維陣列:int a[4];  a作為陣列名就是我們陣列的首地址, a是一個地址常量
首先說說常量和變數的關係, 對於變數來說, 用箱子去比喻再好不過了, 宣告一個變數就宣告一個箱子,比如我們開闢出一個蘋果型別的箱子, 給這個變數賦值就是把盛放蘋果的箱子中放入一個實實在在的蘋果, 這就是變數的賦值.  
而對於陣列來說, 就是一組型別相同的箱子中,一組蘋果箱子, 可以放入不同的蘋果.
2、一維陣列空間:
變數被聲明後, 我們操作編譯器, 對我們的C原始檔進行編譯, C在編譯的時候 就會給我們的變數開闢相應的空間, 而對於陣列而言, 開闢的空間是連續的.   我們把每個空間叫做儲存單元, 每個空間都是有自己的編號, 就像我們現實生活中每戶人家都有自己的一個門牌號一樣, 系統陣列空間地址是相連的, 並且我們的陣列名就是一維陣列首地址, 是一個地址常量. 
3、指標:
既然陣列的是佔用連續的儲存單元, 並且陣列的首地址就是陣列名, 我們可以通過指標變數來取出相應的地址. 
指標變數, 就是這個箱子是專門存放其他箱子地址的. 我們可以把陣列首地址給我們的指標變數. int a[4],*p; p=a;

以一維陣列int a[4] 分析其與指標的關係如圖1所示

                                                                 

                                                                             圖1 一維陣列int a[4] 與指標關係

 二維陣列和指標:

通過剛才對一維陣列與指標的關係介紹,我們接下來探討一下二維陣列與指標的關係

一個二維陣列在計算機中儲存時,是按照先行後列的順序依次儲存的(即行主序),當把每一行看作一個整體,即視為一個大的陣列元素時,這個儲存的二維陣列也就變成了一個一維陣列了。而每個大陣列元素對應二維陣列的一行,我們就稱之為行陣列元素,顯然每個行陣列元素都是一個一維陣列。

以二維陣列brr[3][4]為例進行分析與指標的關係如圖2所示:

                   

                                                                            圖2 二維陣列brr[3][4]與指標的關係

brr[0][4]屬於越界狀態,事實上在上述例子中brr[0][4]和brr[1][0]是一樣的,我們可以通過訪問他們的記憶體地址判斷是否一樣。

int (*p)[4]是一個指向長度為4的整形陣列的指標(陣列指標

int *p[4]是一個儲存指標的陣列(指標陣列