在C程式的陣列中為什麼下標要從0開始呢?從1開始不行嗎

2021-03-21 18:35:13 字數 3169 閱讀 8034

1樓:匿名使用者

可以,但是浪費了記憶體

,比如開闢100個儲存,int array[100]:是從0~99,而你是從一開始,必須是int array[101]了,之所以下標從0是因為pc的記憶體他的硬體實實在在就是從0位址開始索引的……

2樓:

陣列的位址與第乙個元素的位址相同,下標為多少也就是指偏移量為多少的位址,所有0開始比較方便。

還有一些歷史原因吧,有些時候設計者就是按照他的思想設計的,就是他認為的,也沒那麼多原因。

3樓:匿名使用者

c語言是老外發明的,老外都是從0開始,跟中國人習慣不同

4樓:匿名使用者

程式最終都會編譯成機器碼,如果你了解彙編的話應該知道,陣列佔用著一串連在一起的記憶體,陣列名可以理解為那一塊記憶體的首位址,下標則是偏移,定址過程就是首位址+偏移*步長,第乙個元素偏移為零,剛好等於下標,如果下標從1開始處理起來麻煩一點。

5樓:匿名使用者

在c程式的陣列中為什麼下標要從0開始呢?從1開始不行嗎?

可以。但是從0開始更節約記憶體。

為什麼c語言的陣列下標從0開始而不是從1開始

6樓:匿名使用者

一種約定。

如果最初約定從1開始 那也沒什麼

至於為什麼會選擇從0開始,最重要的原因 我覺得是方便對於任意的a[i] 取值的時候 都是等效於*(a+i)a是陣列首位址,這樣訪問第乙個元素 *(a+0) 就不需要任何偏移了。

c語言的下標為什麼從0開始

7樓:甜心乳酪

其實從0開始是有一定道理的。

陣列是一段連續的空間,要求a[i]就是求它的位址,然後找到它。如果從0開始,則a[i]的位址= 首位址 + i*每個資料所佔的長度;如果從1開始,則a[i]的位址= 首位址 + (i-1)*每個資料所佔的長度。

是不是前一種更好計算呢。

如果是二維陣列就更是這樣了。

8樓:匿名使用者

沒有規定一定要從「0」開始啊,如果你願意,可以從任何數字開始,也能達到一樣的效果。

不過按照人們的習慣,做加法計算的時候,初值都選用「0」(這樣,加幾減幾都不會出現偏差);做乘法運算的時候,初值都選用「1」(如果選用「0」的話,乘到最後的結果就只能是「0」不會得到預期的結果了)。

9樓:手機使用者

和計算機內部的資料結構相關

用二進位制第乙個是0

10樓:匿名使用者

學了多維陣列後還不明白這個問題嗎?c語言的這個特徵是很方便的,

11樓:匿名使用者

基本上程式語言的下標都是從0開始的,這可能跟現實中有點兒不一樣..不過慢慢習慣了就好了...^_^

12樓:

vb裡要說option base 1 下標才從1開始啊

我感覺樓上的說的對

13樓:匿名使用者

硬性規定啊!

將來你要能搞出一套開發環境來,下標想從幾開始就從幾開始,你自己規定,別人服從!

14樓:匿名使用者

從幾開始不都一樣,只是個標記而已,也可以從'a'開始,從100開始,習慣了就好了。

15樓:

mlt2004說得好

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

16樓:匿名使用者

陣列是一段連續的空間,要求a[i]就是求它

的位址,然後找到它。如果從0開始,則a[i]的位址= 首位址 + i*每個資料所佔的長度;如果從1開始,則a[i]的位址= 首位址 + (i-1)*每個資料所佔的長度。

是不是前一種更好計算呢。

c語言陣列的下標總是從0開始嗎?

17樓:匿名使用者

在其它一些語言中,情況可能有所不同,例如在basic語言中陣列a[max]的元素是從a[1]到a[max],在pascal語言中則兩種方式都可行。

注意:a[max]是乙個有效的位址,但該位址中的值並不是陣列a的乙個元素。

上述這種差別有時會引起混亂,因為當你說「陣列中的第乙個元素」時,實際上是指「陣列中下標為。的元素」,這裡的「第乙個」的意思和「最後乙個」相反。

因為指標和陣列幾乎是相同的,因此你可以定義乙個指標,使它可以象乙個陣列一樣引用另乙個陣列中的所有元素,但引用時前者的下標是從1開始的:

/*don't do this!!*/

int a0[max],

int *a1=a0-1; /*&a0[-1)*/

現在,a0[0]和a1[1)是相同的,而a0[max-1]和a1[max]是相同的。然而,在實際程式設計中不應該這樣做,其原因有以下兩點:

第二,這種方式背離了c語言的常規風格。

常用的程式語言,陣列下標從0和1開始的分別有哪些

今天長見識了,為什麼陣列的下標從0開始,–

18樓:匿名使用者

陣列是記憶體中申請的一塊連續的區域,如果這個區域的首位址為x,則第乙個元素也指向這個位址x,第乙個元素相對陣列的首位址的偏移(相對位置)為0。這是陣列的下標從0開始的原因,組合語言、c語言這些相對接近機器的演算法語言就是這樣規定的。

為什麼c語言中陣列要從0開始

19樓:浮誇

滿意答案李誠(本心)5級2009-07-25首先,陣列從零開始這個很多語言都是的,不過基本上可以看作從c語言開始就這樣,後來的語言就是形成習慣了啊 追問: c語言為為什麼是從0開始,我記得0一開始的時候好像不是視為自然數的,小學的時候。 回答:

個人認為和陣列的使用方法有關,在c語言的使用中,推薦的使用方式並不是a[0]這種方式,而是直接使用陣列指標,那麼第乙個陣列單元就是a,第二個就是a+1,正好和所謂的下標也吻合了,以後就知道a+x就是a[x],如果是從一開始的話那麼這兩個就又錯開一位。這個答案是看了c programming language後總結的,不知道對不對,建議你也看看這本書。風之子 的感言:

這個答案挺新鮮,我有這本書,不過沒有怎麼看。可能是你說的原因吧,謝謝。

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

這是c和c 規定,vb預設也是從0開始。這是因為在使用陣列元素,如a i 時,是需要計算該元素在記憶體中的位址,為陣列的起始位址a,加上i個元素的偏移量,即a i 的位址為a i 元素型別的大小。當i 0 即下標為0 時,陣列的最開始的元素所在位址,就是陣列的起始位址。即a 0 的位址,就是a這個陣...

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

一種約定。如果最初約定從1開始 那也沒什麼 至於為什麼會選擇從0開始,最重要的原因 我覺得是方便對於任意的a i 取值的時候 都是等效於 a i a是陣列首位址,這樣訪問第乙個元素 a 0 就不需要任何偏移了。陣列下標都是從1開始的,為什麼說成是從0開始的呢?陣列下標說成是從0開始的是因為如果從1開...

c語言題目陣列在定義時和引用時所帶的下標有何區別

定義時 下標 表示 這個陣列的 總的元素個數。就是總大小。引用時候 下標是個 標記。用scanf s 不能輸入空格的。gets 可以 定義時指的是元素的個數n,而引用的時候是單個元素,0 n 1 使用getline type a 19 type a a 10 於是,a成為乙個下標為 9 9的type...