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

2021-10-04 22:09:52 字數 722 閱讀 5484

為了更方便計算記憶體位址

陣列( array )是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料 。

**線性表:**按線性結構儲存(依次儲存),陣列,鍊錶,佇列,棧都是經典的線性表

**連續記憶體空間和相同資料型別:**真是因為有這兩個限制才會有隨機訪問這個性質的。 我們來看看int型別長度為10的陣列在記憶體中是如何儲存的。假設起始位址為1000。

計算機去獲取某個變數,本質都是去它對應的記憶體讀取,所以必須要先獲取對應的記憶體位址,記憶體位址計算方法:

a[i] address = base_address + i * data_type_size
a[i] address = base_address + (i -

1)* data_type_size

相比而言,上面記憶體位址計算方法更好,這也很好解釋了為什麼陣列支援隨機訪問。

#一些常見的錯誤:

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

陣列的下標為什麼從0開始

關於陣列的下標為什麼從0開始,我想這是許多初學陣列的同學所疑惑的,在此我發表一些我的看法。首先假設我要定義乙個int a 相信大家對這個還是比較容易理解的,這個時候系統自動為a分配2個位元組的儲存空間 有的編譯器是4個 一般是兩個 a無可厚非,指的就是那兩個位元組的空間,如果要給a賦值的話,直接a ...

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

對於學習過程式語言的人來說,相信絕大多數人都會有這樣的疑問 我們平時計數,通常是從一開始計數的,為什麼在程式語言中,陣列的下標是從0開始計算的呢?這是因為,c語言中,下標的含意是 當前元素到第乙個元素的偏移量。第乙個元素的下標自然就是0,第二個元素的下標為1,第n個元素的下標為n 1。這樣處理能帶來...

為什麼TCP的序號是隨機的,而不是從0開始?

主要有兩個問題 假設客戶端a發給服務端b的乙個包在網路裡面停留太久 最後本次連線已經結束了,後面又重新建立了一次連線 恰巧這次連線的四元組和上次相同,其實就是源埠剛好相同 四元組 源ip位址 源埠號 目標ip位址 目標埠號 這時序號又是從0開始,而卡了很久的包在這時送到了服務端 因為連線時的序號都是...