一維數組和指針:
對于一位數組和指針是很好理解的:
一維數組名:
對于這樣的一維數組:int a[5]; a作為數組名就是我們數組的首地址, a是一個地址常量 .
首先說說常量和變量的關系, 對于變量來說, 用箱子去比喻再好不過了, 聲明一個變量就聲明一個箱子,比如我們開辟出一個蘋果類型的箱子, 給這個變量賦值就是把盛放蘋果的箱子中放入一個實實在在的蘋果, 這就是變量的賦值.
而對于數組來說, 就是一組類型相同的箱子中,一組蘋果箱子, 可以放入不同的蘋果.
一維數組空間:
變量被聲明后, 我們操作編譯器, 對我們的C源文件進行編譯, C在編譯的時候 就會給我們的變量開辟相應的空間, 而對于數組而言, 開辟的空間是連續的. 我們把每個空間叫做存儲單元, 每個空間都是有自己的編號, 就像我們現實生活中每戶人家都有自己的一個門牌號一樣, 系統數組空間地址是相連的, 并且我們的數組名就是一維數組首地址, 是一個地址常量.
指針:
既然數組的是占用連續的存儲單元, 并且數組的首地址就是數組名, 我們可以通過指針變量來取出相應的地址.
指針變量, 就是這個箱子是專門存放其他箱子地址的. 我們可以把數組首地址給我們的指針變量. int a[7],*p; p=a;
二維數組和指針的理解:
對于初學者對二維數組和指針的理解很模糊, 或者感覺很難理解, 其實我們和生活聯系起來, 這一切都會變得清晰透徹.
我們用理解一維數組的思想來理解二維數組, 對于一維數組,每個箱子里存放的是具體的蘋果, 二維數組,就是把一維數組中的內容中又存放了一系列的箱子, 這樣就構成了二維數組.
這就像一輛火車, 火車有很多節火車廂, 每個火車廂里面有一趟座位, 那我們火車廂的編號和每個火車座位的編號就不同了. 例如int a[3][4] ; 3節火車廂, 每個火車廂中有四個挨著的座位. 實際的座位的編號和我們的火車廂的編號這是我們要區分開的, 我們的火車廂編號就是a[0],a[1],a[2](從座位的角度上來看)
從外面看, 我們每節火車廂的地址, a+0,a+1,a+2, a就相當于一個行地址, 火車廂為單位的地址, a+1是跳到下一個車廂的首地址, 而a[0]就相當于是座位的首地址, a[0]+0就會跳到第0節車廂的第0個座位, a[0]+1就會跳到第0節車廂的第1一個座位.
指針數組指向二維地址(座位的地址,實際地址):
建立一個指針數組來引用二維數組中的元素:int *p[3], a[3][2],i,j; 從各種可以看到p是一個數組名, 在定義時系統給他開辟3個連續的存儲單元; 在這個前面加上*號表示, 數組的基本類型為int的指針類型. 我們可以通過for循環讓這個數組里面的指針指向每排"座位"的首地址:
這個數組可以理解為是"座位"地址類型數組.
而下面我們定義的這個數組: int a[3][2], (*prt)[2] 為行指針數組(火車車廂數組). 這樣我們可以把每節"車廂的地址"放入到我們的行指針數組變量中了.
這樣我們可以把a這個行地址常量賦值給行地址變量 p=a. p+1等價于a+1,等價于a[1] 當p指向數組的首地址時, 可以通過以下形式來引用p[i][j]:
(1) *(p[i]+j)
(2)*(*(p+i) +j ))
(3)(*(p+i))[j]
(4)p[i][j]
p是一個行指針變量, 而二維數組名a是一個行地址變量.
以上就是對二維數組和指針的理解.
新聞熱點
疑難解答
圖片精選