黑马程序员技术交流社区

标题: 关于数组角标的问题 [打印本页]

作者: 闵云波    时间: 2013-6-10 22:33
标题: 关于数组角标的问题
本帖最后由 闵云波 于 2013-6-12 13:19 编辑

为什么数组角标从0开始,而不是从1开始呢?
作者: 郑锐    时间: 2013-6-10 22:48
因为这是规定{:soso_e113:}
作者: 尹丽峰    时间: 2013-6-10 22:50
这类问题。。。谁叫0也是自然数呢?
作者: 金辉    时间: 2013-6-10 22:58
可能是之前语言的习惯吧
作者: xiaohu1218    时间: 2013-6-11 17:08
关于数据角标从0开始,可能是标准规定,也可能跟内存地址有关,学c++的时候曾有过计算地址值:
定义数组后会开辟一段连续的内存空间,
比方说数组a中,知道了数组的首地址,和相邻两项的地址偏移量(印象中是定值),
第一项不需要加偏移量,即加0个偏移量;
计算第二项的地址时只需要将第一项的首地址加1个偏移量;
计算第三项的地址时用首地址加两个偏移量...
可能是因为添加偏移量的个数从0开始,这个属于个人观点。
刚开始学习的时候,使用起来不太适应。
后来就像使用一些固定的算法一样,习惯了就好
作者: 王瀛    时间: 2013-6-11 23:32
就当硬性规定记吧。。。

作者: 麦子    时间: 2013-6-12 10:40

数组在内存中占用是一段连续的空间且数组指针中记录的是首个元素的物理首地址,根据其在内存中的这种存储特征,
我们去访问数组的某元素时,只需要知道其与第一个元素之前间隔了多少个元素就能知道该元素在内存中的物理地址,
而第一个元素与第一个元素之间间隔元素个数为0,故下标从0开始,这是从计算机的角度考虑的。

作者: Heart    时间: 2013-6-12 10:53
你可以把数组变量看成指针,数组下标看成地址的偏移量。
因为数组第一个元素的地址偏移量一定是0,所以数组下标就是从0开始了。
而且从0开始更符合计算机逻辑,计算方便
作者: 李复安    时间: 2013-6-12 12:23
数组是一段连续的空间,要求a[i]就是求它的地址,然后找到它。
如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;
如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。
拥有从0开始的下标可以使编译器简化一点,而且,这样也可以使得数组下标运算的速度有少量的提高。

所以,从0开始更好计算。

作者: gjggw123    时间: 2013-6-12 13:16
关于数据角标从0开始,可能是标准规定,为什么是标准,是因为大家都在使用SUM公司的开发工具,一直成为一个习惯,因而成为一种标准.
角标的开始 从0....一直到N-1.
   说白啦  从0开始在魔种函数上更有意义.


换句话说.你的技术还没有得到大家的认可,等到大家认可你的技术很牛时,那时刻的你也就是你一生的标准.呵呵
作者: 闵云波    时间: 2013-6-12 13:18
李复安 发表于 2013-6-12 12:23
数组是一段连续的空间,要求a就是求它的地址,然后找到它。
如果从0开始,则a的地址= 首地址 + i*每个数据 ...

谢谢,明白了
作者: 李复安    时间: 2013-6-12 14:15
闵云波 发表于 2013-6-12 13:18
谢谢,明白了

不必客气,加油哈、




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2