【編程】你問我爲何數組要從零開始?由於我樂意~

        如題,數組第一個元素爲何要從零開始,而不從一開始?感受這很反人類呀,正常來說,一個集合的開始,不該該從一嗎?編程

        對於這個問題,我以爲能夠從如下兩方面來考慮。數組

設計層面

        咱們先了解一下數組最基本的結構和尋址方式(即實現方式)。數據結構

        如今市面上不管是C、Java、PHP,仍是Go或者其餘編程語言,他們數組的實現方式,應該都是同樣的:一段連續的內存。編程語言


 

        數組在分配內存的時候,咱們會知道數組的開始地址(PS:在目前下標爲零的狀況下,也等同於數組的第一個元素的地址);學習


 

        由於數組中每一個元素的類型都是相同的,因此每種類型所佔的內存大小是固定的,於是致使數組中每一個元素的所佔的內存大小都是相同的設計


 

        由此咱們能夠得出,數組中每一個元素地址的計算公式:視頻


 

// n爲數組座標,x爲數組開始的內存地址,size爲每一個元素的大小blog

array[n]的地址 = x + n * size 遊戲

        這是目前數組尋址的計算公式; 可是這是小標起始爲0的時候,假如咱們想讓數組的起始下標變爲1,則公式會變成什麼樣呢?內存

//n爲數組座標,x爲數組開始的內存地址,size爲每一個元素的大小

array[n]的地址 = x + (n - 1) * size 

        對比以上兩個公式,會發現,若是用下面的公式,僅僅是多了一個"n - 1"的運算!

        要知道,數組是計算機語言的最最基本的組成單元,全部的計算機編程語言的其餘組成部分,包括各類類庫,各類特殊的數據結構(如Golang的channel)和語法字段等,都是基於數組等這些最最基本的組成單元之上作的封裝;

        假如咱們把數組從1開始,對數組而言只是多了一步計算,可是,對於整個編程語言的系統而言,將會是多了無數次計算!因此:在編程語言的設計中,對於數組等這些最最基本的編程操做,要把效率作到極致!所以,數組的起始下標會是0開始。

歷史緣由

        還有一個比較重要的緣由我以爲是歷史使然,當初初級編程語言數組的設計(例如C),就是由零開始的;開發者們都熟悉了這種編程方式,致使後來陸陸續續出現的高級編程語言都延續了這個習慣。

若是你想學習更多編程,小編推薦個人C語言/C++編程學習基地【點擊進入】!

都是學編程小夥伴們,帶你入個門仍是簡簡單單啦,一塊兒學習,一塊兒加油~

還有許多學習資料和視頻,相信你會喜歡的!

涉及:遊戲開發、經常使用軟件開發、編程基礎知識、課程設計、黑客等等......

相關文章
相關標籤/搜索