一口氣吃下數組的存儲方式

Long long ago,我們講到了數組《聊一聊數組背後的那點事》,這個已經是邁進指針的第一步了,主要的內容是一維數組,今天我們將講述二維數組。當結束了今天的內容之後就會開啓指針部分的內容。指針可以說是C語言的靈魂啦,如果真的想搞定指針,一定要好好學習本節課的內容,並且好好回顧一下上節課的內容哦~

1

二維數組的定義

定義二維數組的方法跟一位數組相似,使用方括號指定每個維度的元素個數:

其實可以很形象的將二維數組想象成一個平面,如下所示分別對應着 5*5,4*5 和 6*3 大小的二維數組。

但是這只是一種想象,因爲實際上二維數組在內存中是以線性的方法進行存儲的,如下圖爲一個 int b[4][5]; 大小的數組在內存中存儲示意圖

如上圖所示,其中的 b[0] 表示 int b[4][5]; 中的第一行中的元素,同理b[1], b[2], b[3] 表示第二行,第三行和第四行中的元素。在上圖中的第二行可以看到 b[0] 中具體存儲的是第一行中的 5 個元素(b[0][0] 到 b[0][4]),b[1] 裏面所儲存的就是 b[1][0] 到 b[1][4] 5 個元素。可以看到,我們雖然將數組定義爲了二維的形式,但是在內存中仍然是以線性的形式進行存儲。

到目前已經講了一維數組和二維數組在內存中是如何存儲的了,那三維數組或者多維數組呢?思考一下,期待在留言中看到你的答案哦~

2

二維數組的初始化

二維數組主要提供了以下幾種初始化的方式

  • 由於二維數組在內存中是線性存放的,因此可以將所有的數據寫在一個花括號內,即
  • 爲了更直觀地表示元素的分佈,可以用大括號將每一行的元素括起來,即

對於上面代碼中的兩種方式,我們更推薦第二種方式。因爲第二種方式更加直接,雖然佔用空間變大了,但是也更容易被理解。

  • 二維數組也可以僅對部分元素賦初值

上面的這段代碼將對數組中第每一行的第一個元素進行賦值,其餘的部分將自動補零。

  • 如果希望整個二維數組初始化爲0,那麼直接在大括號裏寫一個0即可:
  • C99同樣增加了一種新特性:指定初始化的元素。這樣就可以只對數組中的某些指定元素進行初始化賦值,而未被賦值的元素自動初始化爲0:
  • 二維數組的初始化也能偷懶,讓編譯器根據元素的數量計算數組的長度。但只有第1維的元素個數可以不寫,其他維度必須寫上:

2

二維數組的訪問

二維數組的訪問的具體方式如下

跟訪問一維數組相似,同樣是使用下標訪問數組中的元素。同樣需要注意下標的取值範圍,以防止數組的越界訪問。比如 int a[3][4],其“行下標”的取值範圍是 0~2,“列下標”的取值範圍是 0~3,超出任何一個下標的訪問都會造成越界。

今天的內容就先到這裏啦,接下來的文章很多都是燒腦文章哦,什麼指向指針的指針,數組指針與指針數組的區別,數組名和指針……各種奇奇怪怪像繞口令一樣的問題會接踵而至,我準備好了,你呢~

3

參考

[1] “小甲魚” 視頻課程《帶你學C帶你飛》【第一季】P20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章