1. 程式人生 > >陣列下標為什麼是從0開始的,而不是1?

陣列下標為什麼是從0開始的,而不是1?

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

隨機訪問

為什麼陣列能支援隨機訪問呢,我們先來看看陣列專業定義。陣列( Array )是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料
這裡有幾個關鍵詞,我們來分別仔細解釋一下:

  • 線性表:按線性結構儲存,陣列,連結串列,佇列,棧都是經典的線性表
  • 連續記憶體空間和相同資料型別:真是因為有這兩個限制才會有隨機訪問這個性質的。 我們來看看int型別長度為10的陣列在記憶體中是如何儲存的。假設起始地址為1000

我們要把握一個最基本的原則,計算機去獲取某個變數,本質都是去它對應的記憶體讀取,所以必須要先獲取對應的記憶體地址。

上面就是具體的計算公式,至此我們可以明白陣列為什麼支援隨機訪問了。

一些常見的錯誤

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