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

2021-03-26 17:48:14 字數 4461 閱讀 3298

1樓:甜心乳酪

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

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

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

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

2樓:匿名使用者

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

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

3樓:手機使用者

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

用二進位制第一個是0

4樓:匿名使用者

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

5樓:匿名使用者

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

6樓:

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

我感覺樓上的說的對

7樓:匿名使用者

硬性規定啊!

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

8樓:匿名使用者

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

9樓:

mlt2004說得好

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

10樓:水水好萌

是的,對陣列a[max](max是一個編譯時可知的值)來說,它的第一個和最後一個元素分別是a[o]和almax-1)。在其它一些語言中,情況可能有所不同,例如在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語言的常規風格。人們已經習慣了c語言中陣列下標的工作方式,如果你的程式使用了另外一種方式,別人就很難讀懂你的程式,而經過一段時間以後,連你自己都可能很難讀懂這個程式了。

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

11樓:匿名使用者

一種約定。

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

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

儲存單元為什麼從0開始編址?c語言陣列下標為什麼要從0開始?

12樓:幻夢·人生

以陣列為例,陣列是使用連續的儲存空間儲存資料。

int a[4] = ;

陣列名a代表的就是這個儲存版空間的首地址。

1儲存的權位置就是儲存空間的首地址。

而2儲存的位置就是首地址加上1個int型所需空間的地址。

以此類推

所以a[n]元素的地址,實際上就是a的地址,加上n個元素的所佔空間大小

a[n]地址 = a地址 + sizeof(int) * n;

綜上所述,陣列的下表可以理解為距離首地址的偏移量。

所以第一個元素距離首地址的偏移量為0;因為第一個元素的地址,就是首地址。

13樓:牛津字典喝芬達

計算機中採用二進位制,不考慮符號的情況下最小數是"0x0000",所以在計算機中起始位置都是從0開始的

為什麼在c語言定義陣列時下標必須從零開始呢?

14樓:

為了標新立異.

在c出現以前的流行語言,例如fortran 從1開始,algol可以自由定義下標從幾開始.

c語言定義從零開始.

從零開始對使用者來說沒有自由定義好,但編譯器設計簡單.省事.

15樓:張立斌

yxlovemoney mdffeng l_o_o_n_i_e

回答的都很有道理。

在c語言定義陣列時下標必須從幾開始,並不要緊,因為這是系統定義的。

無論從幾開始,我們都要會用,都要用好。

16樓:匿名使用者

這需抄要從陣列的儲存方式上襲解釋了。

定義一個bai陣列時,系統會du分配zhi一塊連續的內

dao存,由陣列名指向該塊記憶體的首地址。

引用某個元素時,首先需要計算該元素的地址(及 陣列名 + 下標),然後根據該地址取到相應儲存單元的內容。

所以,如果希望取陣列的第一個元素,下標必須是0

17樓:匿名使用者

就是這麼規定的,沒為什麼

18樓:匿名使用者

為了方便,不用0的話,反而更復雜。

19樓:匿名使用者

美國人計數一般都從0開始

20樓:匿名使用者

c規定的,沒什麼原因,其他語言定義是從1開始的,只是有點方便

21樓:匿名使用者

就是人要吃

bai飯,為什麼不吃屎du一樣的原因zhi,開個玩笑。

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

那樣從0開始就更易於計算。

不過真正的還是要問其作者才知道具體意義

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

22樓:匿名使用者

一個陣列的基地址是該陣列的第一個元素地址,沒有要求

說下標必須從零開始,他們可以從任何一個數開始,只要是連續的就可以,但是起始下標是零比較方便討論,因此我們一般都讓陣列從下標零開始,除非有很好的理由不這麼做。

23樓:匿名使用者

好計算地址偏移,你要是懂c語言就比較明白了。

24樓:匿名使用者

c語言的編譯器說從陣列從第0個開始,c語言就從第0個開始了。

25樓:

matlab中陣列下標從1開始

c語言的陣列下標為什麼要設計成從零開始

26樓:倒黴孩子改名啦

計算機的記憶體編號是從零開始編號的,是一種規定,程式的執行要靠計算機系統分配記憶體,所以,這也是一種規定。

c/c++中陣列下標從0開始而非從1開始,為什麼?

27樓:匿名使用者

隨著你遇到的問題種類越來越多,你就會發現下標從0開始能給程式在細節上帶來的優化效果了。

比如,最基本的,確定陣列a中第i個元素的地址,如果從0開始,則a[i]的地址= 首地址 + i*每個資料所佔的長度;如果從1開始,則a[i]的地址= 首地址 + (i-1)*每個資料所佔的長度,多了一個整數計算

28樓:紫金玄鐵

方便訪問陣列成員。

從0開始的話,只需用陣列名(也就是陣列地址),加上下標,只需要很簡單的計算,就可以記憶體中準確訪問到元素。

像在pascal這樣的語言中,陣列下標是可由人去定的。如:

vararr: array[2..4] of integer; //陣列下標從2開始,到4結束。

雖然pascal這樣的數定,在邏輯上很方便人們去理解。但從編繹器角度來講,就很麻煩了。這時,你要訪問一個陣列元素,就不得不知道陣列的下界,還要經過轉換才能得到元素的相對指標。

如果是在多維陣列的應用中,就更顯而易見了。

c語言在工程應用中應用廣泛,就是因為他對硬體的支援效率高,

在早期硬體不是很高階的時候,將陣列下標選為0,大大提高訪問陣列速度,而且還省去了不必要的暫存器佔用。

在c語言中陣列a0是什麼意思,C語言a0是什麼意思

a 0 表示陣列中的bai第一個值 du,可以把它看成一個變zhi量x,a 0 也就是陣列dao中第一個值 1再存放到原位。版比如 int a 2 其中a 0 1 a 1 5 a 0 以後權,a 0 的值變為2 陣列a的第一個元素加1,陣列a應該是數值型的沒錯吧 這個就是一個自增,陣列值的自增,就是...

c語言關於eit0的問題,c語言關於exit 0 的問題

有時程式中加入的一些語句,可以說沒有任何用處,但可以讓閱讀者認專識一種新的語句,以屬及大概的使用方式。exit 0 是正常退出程式,作用和break有點類似 但break是退出某一語句體,到下一個語句執行,exit是正常退出程式,後面的語句將不再執行。你試試,當要求輸入的運算子不對時,最後的輸出語句...

c語言中ik0是什麼意思,C語言中i k 0是什麼意思

這是一個邏輯判斷表示式。意思是i除以k的餘數等於0是否成立,如果成立,表示式的值為1,否則為0 判斷i除k的餘數是否等於0 一般放在if裡面 就是判斷i是否能被k整除 判斷 i是否能被 k整除。判斷i除以k的餘數是否等於0,即i是否能被k整除。當i和k都是整數型的時候,是整除,是模除取餘 i k 0...