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

時間 2022-01-20 07:04:26

1樓:servletabc

In most programming language, the name of any array is a pointer, which is nothing but a reference to a memory location, and so the expression array[n] points to a memory location which is n-elements away from the first element. This means that the index is used as an offset. The first element of the array is exactly contained in the memory location that array points to (0 elements away), so it should always be referred as array[0].

a[i] can also be read as value at [a+i] which is denoted as *(a+i) , so it always starts at zero.

2樓:Cyril Liao

這個是一種規定,如果從1開始會存在很多不方便的地方,從0開始下標表示偏移量

C語言中 陣列可以從下標為1開始賦值嗎?

DK菌 從標準來講是可以的,隨便從任何一個大於等於0的下標開始都可以 但一般不這麼幹,C呼叫別的函式傳遞陣列時容易出問題,因為一般遍歷陣列從0開始,那麼 0 就多出來了,要是用指標和整型傳遞陣列就容易導致缺一個元素 對於C 風格字串是絕對不行的,如果字串已初始化為0,那麼 0 的值就是0即 0 在A...

Lua 為什麼陣列下標從 1 開始?

Dionysos lai 留著,佔坑,待會兒回去講。起始,原因並沒有像大家猜測的那樣。在官網lua users wiki Lua Faq和非非官網Lua Unofficial FAQ uFAQ 都提到過這個問題。這裡,貼一下其回答內容 1.5.1 Why do Lua arrays count fr...

C語言陣列定義時不初始化為什麼會報錯?

陌歸 a i 代表一維陣列中下標為i的元素。假如你定義了一個a 5 呼叫的時候用的a 5 是越界訪問的下標為5的元素 因為事實上陣列a 5 的下標值只到4 不是整個陣列。只有在定義的時候a代表陣列。 薛非 先定義int ages 5 或int ages 再一個一個賦值是可以的,這不可能。請如實描述問...

C語言二維陣列的名稱的困惑?

暮無井見鈴 講無型別的地址本身儲存什麼值沒有意義。地址是什麼型別指標的值 要求合法且非 NULL 該地址 就儲存這個型別的物件。注意具體程式中能合法讀取某個地址的指標型別是較為有限的。arr 是 int 10 10 型別陣列物件,可以隱式轉換成 int 10 型別指標值。該指標值指向陣列首元素。取 ...

C語言動態陣列忘記free了對電腦有什麼損害?

燕歸 普通情況下是沒有損害的,因為系統和使用者使用的記憶體是分割的。大部分情況下記憶體是夠用的,你如果申請了太大的記憶體會造成電腦執行記憶體變小,出現卡頓的情況。 如果你是一個小程式,執行完就退出的話,記憶體會自動釋放的。但是如果是大專案,用完不退出不釋放的話有兩個可能 1.你的程式是32位的,那麼...