为什么数组从0而不是1开始? (C,C ++)

时间:2019-04-23 04:57:15

标签: c++ arrays array-indexing

这不是一个真正的代码问题,而是一个疑问,为什么C和C ++上的数组从0开始?它与某些内部流程有关系吗?

int array[4]={1,2,3,4};
cout<<array[0];
cout<<array[1];
cout<<array[2];
cout<<array[3]; ///This prints 1234

但是为什么要代替

int array[4]={1,2,3,4};
cout<<array[1]; //as the first element
cout<<array[2];
cout<<array[3];
cout<<array[4]; 

2 个答案:

答案 0 :(得分:4)

因为该符号执行指针算术运算。 array[0]实际上表示数组的位置加上0个元素的大小

与C语言一样,您正在接近硬件。

答案 1 :(得分:0)

考虑int arr [i]元素。

arr [i]被解释为*(arr + i)。现在,arr是数组的地址或数组的第0个索引元素的地址。因此,数组中下一个元素的地址为arr + 1(因为数组中的元素存储在连续的内存位置中)。 因此,如果执行*(arr + 0),它将给出阵列的起始存储位置。 *(arr + 1)给出下一个存储位置。因此 i 即0,1..etc可以使用类似偏移量。

正如@ravnsgaard在C语言中所说,您正在接近硬件。