小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

為什么編程語(yǔ)言中數(shù)組的下標(biāo)總是從0開始?

 一本正經(jīng)地胡鬧 2019-05-27

昨天看到一個(gè)有意思的問題,為什么在我們遇到的大多數(shù)編程語(yǔ)言里面,數(shù)組的下標(biāo)基本都是從0開始?

這是一個(gè)簡(jiǎn)單的問題,很少人會(huì)有人去思考為什么,但這里面其實(shí)是有一定的數(shù)學(xué)邏輯在里面。像目前主流的編程語(yǔ)言C/C++,Java,JavaScript的數(shù)組下標(biāo)都是以0開始,最后一個(gè)位置的index=數(shù)組的長(zhǎng)度-1,當(dāng)然也有少數(shù)的編程語(yǔ)言如Fortran,聲明一個(gè)a(10)默認(rèn)就是從1開始的,當(dāng)然你可以指定從0開始,需要換種方式聲明a(0:9)。

那么為什么應(yīng)該從0開始而不是1呢,這在計(jì)算機(jī)科學(xué)里面是一個(gè)有趣的概念。首先,它與語(yǔ)言的設(shè)計(jì)有很強(qiáng)的關(guān)聯(lián),比如在C語(yǔ)言里面,數(shù)組的名稱本質(zhì)上是一個(gè)指針,它代表了內(nèi)存里面存儲(chǔ)這塊連續(xù)區(qū)域的開始地址,array[n]代表的是 n-elements 距離開始位置的距離,這本質(zhì)上是通過offset也就是偏移量實(shí)現(xiàn)的。所以數(shù)組里面的第一個(gè)元素是用0表示的,這么說大家可能還是迷惑,說的再直白點(diǎn),比如在Java里面的一個(gè)int數(shù)組,因?yàn)閕nt是32位,在數(shù)組里面的第一個(gè)元素可以理解成是[0,32)這段區(qū)間內(nèi)的值,因?yàn)槠鹗嘉恢檬?,所以簡(jiǎn)單記為0即可,因?yàn)閿?shù)組的類型長(zhǎng)度都是固定的,比如int是32位,long是64位,所以通過起始位置+類型的長(zhǎng)度就可以推算得到任何一個(gè)index的值,比如3下標(biāo)的數(shù)據(jù),可以通過[332,332+32)得到值,不難發(fā)現(xiàn)數(shù)組的下標(biāo)起到了很大的簡(jiǎn)化作用。由于C語(yǔ)言出現(xiàn)的比較早,且非常經(jīng)典,后來的語(yǔ)言都借鑒或者保持了這種特色。

當(dāng)然,上面是純粹從編程語(yǔ)言層面討論的,其實(shí)在數(shù)學(xué)領(lǐng)域,也有比較形象的解釋,假設(shè)我現(xiàn)在有一個(gè)連續(xù)的自然數(shù)序列,1,2,3...一直到10,現(xiàn)在如果想要表示這段數(shù)組,通常有四種表示形式:

a. 0<i<11
 b. 1<=i<11
 c. 0<i<=10
 d. 1<=i<=10

正確的標(biāo)記方法,在自然數(shù)的范圍內(nèi)應(yīng)該包含下面的兩種情形:

(1)子序列可以包含最小的自然數(shù)0

(2)子序列可以是空的

下面我們來看下,上面的四種方法應(yīng)該使用哪種比較適合。首先,對(duì)于要求1可以包含最小的自然0,我們會(huì)發(fā)現(xiàn)a和c的標(biāo)記法是沒法表示0的,除非寫成-1

for(i=0;i<N;i++){
  sum+= a[i];
}

至此你應(yīng)該了解為什么數(shù)組的下標(biāo)要從0開始了,我們寫過很多遍的for循環(huán)語(yǔ)句,雖然簡(jiǎn)單,但本質(zhì)上卻蘊(yùn)含了一種樸素的數(shù)學(xué)之美,世界之奇,莫過如此。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多