簡體   English   中英

如果我不在 C 中使用從零開始的數組會發生什么

[英]What happens if i don't use zero-based array in C

有人可以解釋會發生什么嗎? 是否真的有必要從索引0而不是1 (這對我來說更容易)?

你可以做任何你想做的事情,只要你的數組下標嚴格小於數組的大小。

例子:

int a[100];

a[1] = 2;   // fine, 1 < 100

如果我不在 C 中使用從零開始的數組會發生什么

嗯,你不能 根據定義, C數組是基於零的標准。

真的有必要從0開始嗎?

好吧,這不是阻止您將索引0保留為未使用的規則,但是,您幾乎肯定不會得到所需的結果。

C使用基於非零的數組是可能的,但不推薦。 下面是如何分配一個基於 1 的 100 個整數數組:

int * a = ((int*)malloc(100*sizeof(int)))-1;

-1將指針的開頭從數組的開頭移回一個,使第一個有效索引為 1。因此該數組將具有從 1 到 100 的有效索引。

a[1]   = 10; /* Fine */
a[100] = 7;  /* Also fine */
a[0]   = 5;  /* Error */

不推薦這樣做的原因是C其他所有內容都假定指向內存塊的指針指向第一個感興趣的元素,而不是之前的元素。 例如,上面的數組將無法與memcpy除非您在每次傳入指針時向指針添加 1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM