1. 程式人生 > >數組下標為什麽是從0開始的,而不是1?

數組下標為什麽是從0開始的,而不是1?

開始學習 內存 探索 http 數組 常見 支持 公式 會有

依稀記得大一開始學習C語言的時候,對於數組下標從0開始這一點是非常別扭難以適應的,感覺這就是反人類的設計。直到今天才了解這背後為什麽這樣設計的原理。
為了解釋清楚這個原因,我們來認識數組的相關特性,據此來探索它底層的一些東西。

隨機訪問

為什麽數組能支持隨機訪問呢,我們先來看看數組專業定義。數組( Array )是一種線性表數據結構。它用一組連續的內存空間,來存儲一組具有相同類型的數據
這裏有幾個關鍵詞,我們來分別仔細解釋一下:

  • 線性表:按線性結構存儲,數組,鏈表,隊列,棧都是經典的線性表
  • 連續內存空間和相同數據類型:真是因為有這兩個限制才會有隨機訪問這個性質的。 我們來看看int類型長度為10的數組在內存中是如何存儲的。假設起始地址為1000
    技術分享圖片

我們要把握一個最基本的原則,計算機去獲取某個變量,本質都是去它對應的內存讀取,所以必須要先獲取對應的內存地址。
技術分享圖片

上面就是具體的計算公式,至此我們可以明白數組為什麽支持隨機訪問了。

一些常見的錯誤

1、數組適合查找,查找的時間復雜度是O(1)
這種說法其實是不準確的。其實就算是排序好的數組,用二分查找,復雜度都為O(logn)。準確表達是,數組是支持下標機訪問。時間復雜度O(1)

數組下標為什麽是從0開始的,而不是1?