對於初學者對二維數組和指針的理解很模糊, 或者感受很難理解, 其實咱們和生活聯繫起來, 這一切都會變得清晰透徹.數組
咱們用理解一維數組的思想來理解二維數組, 對於一維數組,每一個箱子裏存放的是具體的蘋果, 二維數組,就是把一維數組中的內容中又存放了一系列的箱子, 這樣就構成了二維數組.spa
這就像一輛火車, 火車有不少節火車箱, 每一個火車箱裏面有一趟座位, 那咱們火車箱的編號和每一個火車座位的編號就不一樣了. 例如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一個座位. for循環
指針數組指向二維地址(座位的地址,實際地址):變量
創建一個指針數組來引用二維數組中的元素:int *p[3], a[3][2],i,j; 從各類能夠看到p是一個數組名, 在定義時系統給他開闢3個連續的存儲單元; 在這個前面加上*號表示, 數組的基本類型爲int的指針類型. 咱們能夠經過for循環讓這個數組裏面的指針指向每排"座位"的首地址:
循環
這個數組能夠理解爲是"座位"地址類型數組. 引用
而下面咱們定義的這個數組: int a[3][2], (*prt)[2] 爲行指針數組(火車車箱數組). 這樣咱們能夠把每節"車箱的地址"放入到咱們的行指針數組變量中了.im
這樣咱們能夠把a這個行地址常量賦值給行地址變量 p=a. p+1等價於a+1,等價於a[1] 當p指向數組的首地址時, 能夠經過如下形式來引用p[i][j]:二維數組
(1) *(p[i]+j)img
(2)*(*(p+i) +j ))
(3)(*(p+i))[j]
(4)p[i][j]
p是一個行指針變量, 而二維數組名a是一個行地址變量.
以上就是對二維數組和指針的理解.