亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

為什么數組是從0開始的

2024-06-28 13:22:00
字體:
來源:轉載
供稿:網友
為什么數組是從0開始的

本文通過匯總一些網上搜集到的資料,總結出大部分編程語言中數組下標從0開始的原因

本博客已經遷移至:

http://cenalulu.github.io/

本篇博文已經遷移,閱讀全文請點擊:

http://cenalulu.github.io/linux/why-array-start-from-zero/


背景

我們知道大部分編程語言中的數組都是從0開始編號的,即array[0]是數組的第一個元素。這個和我們平時生活中從1開始編號的習慣相比顯得很反人類。那么究竟是什么樣的原因讓大部分編程語言數組都遵從了這個神奇的習慣呢?本文最初是受stackoverflow上的一個問題的啟發,通過搜集和閱讀了一些資料在這里做個總結。當然,本文摘錄較多的過程結論,如果你想把這篇文章當做快餐享用的話,可以直接跳到文章末尾看結論。


最早的原因

在回答大部分我們無法解釋的詭異問題時,我們最常用的辯詞通常是歷史原因。那么,歷史又是出于什么原因,使用了0標號數組呢?Mike Hoye就是本著這么一種追根刨地的科學精神為我們找到了解答。以下是一些他的重要結論的摘錄翻譯:

據作者的說法,C語言中從0開始標號的做法是沿用了BCPL這門編程語言的做法。而BCPL中如果一個變量是指針的話,那么該指針可以指向一系列連續的相同類型的數值。那么p+0就代表了這一串數值的第一個。在BCPL中數組第5個元素的寫法是p!5,而C語言中把寫法改成了p[5],也就是現在的數組。具體原文摘錄如下:

If a BCPL variable rePResents a pointer, it points to one or more consecutive Words of memory. These words are the same size as BCPL variables. Just as machine code allows address arithmetic so does BCPL, so if p is a pointer p+1 is a pointer to the next word after the one p points to. Naturally p+0 has the same value as p. The monodic indirection Operator ! takes a pointer as it’s argument and returns the contents of the word pointed to. If v is a pointer !(v+I) will access the word pointed to by v+I.

至于為什么C語言中為什么使用[]方括號來表示數組下標,這個設計也有一定來歷。據C語言作者的說法是方括號是現代鍵盤上唯一較為容易輸入的成對符號(不用shift)不信你對著鍵盤找找?


為什么這個反人類設計在一段時間內一直沒有被改變

根據Mike的說法,BCPL是被設計在IBM硬件環境下編譯運行的。在1960后的很長一段時間內,服務器硬件幾乎被IBM統治。一個城市內也許至于一臺超級計算機,還需要根據時間配額使用。當你當天的配額用完以后,你的程序就被完全清出計算隊列。甚至連計算結果都不給你保留,死無全尸。這個時候寫一段高效的程序,就顯得比什么都重要了。而這時0下標數組又體現了出了它的另一個優勢,就是:相較于1下標數組,它的編譯效率更高。原文摘錄如下:

So: the technical reason we started counting arrays at zero is that in the mid-1960’s, you could shave a few cycles off of a program’s compilation time on an IBM 7094. The social reason is that we had to save every cycle we could, because if the job didn’t finish fast it might not finish at all and you never know when you’re getting bumped off the hardware because the President of IBM just called and fuck your thesis, it’s yacht-racing time.

此外,還有另外一種說法。在C語言中有指針的概念,而指針數組標號實際上是一個偏移量而不是計數作用。例如對于指針p,第N個元素是*(p+N),指針指向數組的第一個元素就是*(p+0),


一些現代語言為什么仍然使用這種做法

上文中提到的為了計較分秒的編譯時間而使用0下標數組,在硬件飛速發展的今天顯然是不必要的。那么為什么一些新興語言,如Python依然選擇以0作為數組第一個元素呢?難道也是歷史原因?對于這個問題,Python的作者Guido van Rossum也有自己的答案。這里大致概括一下作者的用意:從0開始的半開放數組寫法在表示子數組(或者子串)的時候格外的便捷。例如:a[0:n]表示了a中前n個元素組成的新數組。如果我們使用1開始的數組寫法,那么就要寫成a[1:n+1]。這樣就顯得不是很優雅。那么問題來了,Python數組為什么使用半開放,即[m,n)左閉合右開發的寫法呢?這個理解起來就比較簡單,讀者可以參考http://www.cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF作為擴展閱讀。下面摘錄一段Python作者的原話:

Using 0-based indexing, half-open intervals, and suitable defaults (as Python ended up having), they are beautiful: a[:n] and a[i:i+n]; the former is long for a[0:n].Using 1-based indexing, if you want a[:n] to mean the first n elements, you either have to use closed intervals or you can use a slice notation that uses start and length as the slice parameters. Using half-open intervals just isn't very elegant when combined with 1-based indexing. Using closed intervals, you'd have to write a[i:i+n-1] for the n items starting at i. So perhaps using the slice length would be more elegant with 1-based indexing? Then you could write a[i:n]. And this is in fact what ABC did -- it used a different notation so you could write a@i|n.(See http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS.)


總結

從0標號的數組傳統,沿用了這么長時間的原因主要列舉如下:

  • 在計算資源缺乏的過去,0標號的寫法可以節省編譯時間
  • 現代語言中0標號可以更優雅的表示數組字串
  • 在支持指針的語言中,標號被視作是偏移量,因此從0開始更符合邏輯

參考文獻
  1. (http://developeronline.blogspot.com/2008/04/why-array-index-should-start-from-0.html)
  2. [http://exple.tive.org/blarg/2013/10/22/citation-needed/]
  3. [https://plus.google.com/115212051037621986145/posts/YTUxbXYZyfi]
  4. [http://stackoverflow.com/questions/7320686/why-does-the-indexing-start-with-zero-in-c]

上一篇:yum的一些用法

下一篇:NPM install

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品老牛影院在线观看| 亚洲精品久久久久久久久久久| 日韩视频欧美视频| 亚洲一区二区久久| 久久视频国产精品免费视频在线| 国产视频精品xxxx| 岛国精品视频在线播放| 亚洲人成亚洲人成在线观看| 中文欧美在线视频| 成人激情在线播放| 国内外成人免费激情在线视频网站| 国语自产精品视频在免费| 国产精品白嫩初高中害羞小美女| 久久久国产一区| 国模精品视频一区二区三区| 亚洲精品国精品久久99热| 中文字幕国产亚洲2019| 日韩视频―中文字幕| 成人精品久久av网站| 97精品久久久中文字幕免费| 国产精品亚洲精品| 欧美成人午夜激情视频| 最近2019中文字幕大全第二页| 精品在线观看国产| 国产精品欧美在线| 日日骚av一区| 亚洲天天在线日亚洲洲精| 蜜月aⅴ免费一区二区三区| 久久国产精品影视| 国产91精品久久久久久| 亚洲第一二三四五区| 久久亚洲精品成人| 久久精品夜夜夜夜夜久久| 亚洲二区中文字幕| 日韩电影在线观看永久视频免费网站| 欧美性色视频在线| 51午夜精品视频| 九九久久精品一区| 亚洲免费av电影| 色狠狠av一区二区三区香蕉蜜桃| 日韩免费看的电影电视剧大全| 欧亚精品中文字幕| 久久精品国产精品亚洲| 一二美女精品欧洲| 亚洲欧洲日产国产网站| 久久精品视频播放| 久久中文字幕在线| 欧美区二区三区| 97av视频在线| 久久精彩免费视频| 久久久www成人免费精品| 欧美黑人性猛交| 久久精品国产亚洲| 亚洲国产一区自拍| 国产精品99蜜臀久久不卡二区| 欧美做受高潮电影o| 亚洲a在线播放| 欧美精品18videosex性欧美| 日韩在线欧美在线国产在线| 欧美在线视频a| 国产精品久久久久aaaa九色| 久久国产精品亚洲| 欧美限制级电影在线观看| 中文字幕欧美精品日韩中文字幕| 亚洲va久久久噜噜噜久久天堂| 伊人久久综合97精品| 亚洲国产精品久久久久秋霞蜜臀| 上原亚衣av一区二区三区| 欧美区在线播放| 精品久久久久久中文字幕| 81精品国产乱码久久久久久| 中文字幕一精品亚洲无线一区| 色综合色综合网色综合| 17婷婷久久www| 亚洲日韩欧美视频| 青青草99啪国产免费| 欧美激情精品久久久久| 成人在线视频网站| 欧美一区二区.| 欧美国产高跟鞋裸体秀xxxhd| 97在线观看免费| 国产成人小视频在线观看| 91国产视频在线播放| 欧美激情性做爰免费视频| 欧美亚洲另类视频| 夜夜狂射影院欧美极品| 国产精品视频在线播放| 91地址最新发布| 亚洲欧美日韩天堂| 日韩福利在线播放| 国产一区二区三区在线观看网站| 欧美刺激性大交免费视频| 亚洲最大福利网站| 国语自产精品视频在线看一大j8| 成人午夜一级二级三级| 18久久久久久| xxxx欧美18另类的高清| 91视频国产精品| 国产精品视频在线播放| 日本成人激情视频| 91av网站在线播放| 亚洲欧美中文字幕| 92版电视剧仙鹤神针在线观看| 136fldh精品导航福利| 亚洲精品国产成人| 亚洲精品一区二区在线| 国产在线精品播放| 国产成人免费91av在线| 久久久久五月天| 国内精品久久久| 亚洲国产精品久久久久久| 国产精品久久久久999| 欧美日韩国产区| 欧美性猛交xxxx久久久| 亚洲一区亚洲二区| 国产91精品久| 欧美国产日韩在线| 欧美高清电影在线看| 亚洲第一福利网站| 日韩中文有码在线视频| 亚洲精品欧美日韩| 亚洲国产精品小视频| 精品久久久久久亚洲国产300| 国产精品久久久久久久美男| 欧日韩在线观看| 亚洲美女视频网| 欧美性受xxx| 91在线高清免费观看| 亚洲第一精品福利| 日韩中文在线中文网在线观看| 欧美日本中文字幕| 日韩在线精品视频| 成人在线播放av| 伊人久久久久久久久久久| 亚洲人成人99网站| 亚洲精品一区二区三区婷婷月| 久久精品国产亚洲精品| 国产视频久久久久| 精品一区二区三区四区| 成人精品久久一区二区三区| 国模精品系列视频| 精品综合久久久久久97| 欧美黑人国产人伦爽爽爽| 亚洲欧美日韩在线一区| 欧美激情综合色综合啪啪五月| 国产精品丝袜久久久久久高清| 亚洲精品理论电影| 精品激情国产视频| 欧美日韩国产一区在线| 国产精品影片在线观看| 97人人爽人人喊人人模波多| 色综合亚洲精品激情狠狠| 国产精品美女视频网站| 欧美激情视频在线免费观看 欧美视频免费一| 久久综合免费视频影院| 91精品国产九九九久久久亚洲| 精品国产精品三级精品av网址| 日韩精品一区二区三区第95| 国产精品久久久久久久天堂| 亚洲国产精品久久久| 宅男66日本亚洲欧美视频| 91精品国产91久久久久久| 九九精品视频在线| 色综合久久88|