1. 程式人生 > >嵌入式開發C語言之指向陣列的指標

嵌入式開發C語言之指向陣列的指標

一維陣列和指標:

對於一位陣列和指標是很好理解的: 一維陣列名: 對於這樣的一維陣列: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是一個行地址變數. 以上就是對二維陣列和指標的理解.