为什么C和C++里的数组的索引要从0开始?

如果从1开始的话,就和实际生活中一致了,为什么要这样从0开始?

C语言里的数组最早来自指针,p[n]其实就是 *(p + n) 。如果n从1开始,那么意味着白白浪费了p所在地址的内存。

因为一开始我们考虑的不够周到,以后会采纳你的观点推出更好的语言的

当然了,C语言强调的是面向机器的实现和高效率,而不是面向业余开发者。并非所有的语言下标都是从0开始。一些高级语言,比如Basic就可以定义从1开始的下标。

a[10];
char *p=a;
*(p+0)=a[0]; 是不是这样

这得问发明这语言的人

假如定义一个数组 int arr[10]; 数组名本质是指向数组首元素的指针.也就是说当这个指针没有移动的情况下指向的是数组的第一个元素.
而arr[1]是什么意思那?
表示这个指针向右移动一个单位(即一个int),然后取指针指向的内存,那么显然一开始是指向第一个元素,移动一个单位后,便指向了第二个元素,那么arr[1]就代表了第二个元素

一个标准 ,开发人员定的

所有计算机语言都是从0开始,所有编程语言的下标索引都是从0开始。


caozhy      2017.03.22 14:37
已采纳
C语言里的数组最早来自指针,p[n]其实就是 *(p + n) 。如果n从1开始,那么意味着白白浪费了p所在地址的内存。

我觉得这个回答最易懂

如果从1开始,肯定又有人问“为什么从1开始”,这总得有一个开始值吧。

不管是什么语言,0都是一个很特殊的存在,如果你将0直接抹去以适应人的习惯是不行的,这样机器会出现一些不可预知的问题。

这个是偏移量 刚开始肯定没有偏移量 所以从0开始