如果我不在C中使用从零开始的数组,会发生什么

时间:2015-06-23 21:52:38

标签: c arrays

有人可以解释会发生什么吗?是否真的有必要从索引0而不是1开始(这对我来说会更容易)?

3 个答案:

答案 0 :(得分:5)

只要您的数组下标严格小于数组的大小,您就可以执行任何操作。

示例:

int a[100];

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

答案 1 :(得分:5)

  

如果我不在C 中使用从零开始的数组,会发生什么

嗯,你不能。根据定义,C数组基于零。

  

是否真的有必要从0开始?

嗯,阻止您离开索引0 未使用是不合法的,但是,您几乎肯定不会得到所需的结果

答案 2 :(得分:2)

可以在C中使用基于非零的数组,但不建议这样做。以下是如何分配100个整数的基于1的数组:

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。