A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

闵云波

中级黑马

  • 黑马币:0

  • 帖子:28

  • 精华:0

© 闵云波 中级黑马   /  2013-6-10 22:33  /  1881 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 闵云波 于 2013-6-12 13:19 编辑

为什么数组角标从0开始,而不是从1开始呢?

11 个回复

倒序浏览
因为这是规定{:soso_e113:}
回复 使用道具 举报
这类问题。。。谁叫0也是自然数呢?
回复 使用道具 举报
可能是之前语言的习惯吧
回复 使用道具 举报
关于数据角标从0开始,可能是标准规定,也可能跟内存地址有关,学c++的时候曾有过计算地址值:
定义数组后会开辟一段连续的内存空间,
比方说数组a中,知道了数组的首地址,和相邻两项的地址偏移量(印象中是定值),
第一项不需要加偏移量,即加0个偏移量;
计算第二项的地址时只需要将第一项的首地址加1个偏移量;
计算第三项的地址时用首地址加两个偏移量...
可能是因为添加偏移量的个数从0开始,这个属于个人观点。
刚开始学习的时候,使用起来不太适应。
后来就像使用一些固定的算法一样,习惯了就好

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
就当硬性规定记吧。。。
回复 使用道具 举报
麦子 中级黑马 2013-6-12 10:40:44
7#

数组在内存中占用是一段连续的空间且数组指针中记录的是首个元素的物理首地址,根据其在内存中的这种存储特征,
我们去访问数组的某元素时,只需要知道其与第一个元素之前间隔了多少个元素就能知道该元素在内存中的物理地址,
而第一个元素与第一个元素之间间隔元素个数为0,故下标从0开始,这是从计算机的角度考虑的。
回复 使用道具 举报
Heart 中级黑马 2013-6-12 10:53:13
8#
你可以把数组变量看成指针,数组下标看成地址的偏移量。
因为数组第一个元素的地址偏移量一定是0,所以数组下标就是从0开始了。
而且从0开始更符合计算机逻辑,计算方便

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
数组是一段连续的空间,要求a[i]就是求它的地址,然后找到它。
如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;
如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。
拥有从0开始的下标可以使编译器简化一点,而且,这样也可以使得数组下标运算的速度有少量的提高。

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

评分

参与人数 2技术分 +1 黑马币 +6 收起 理由
Sword + 1
闵云波 + 6 很给力!

查看全部评分

回复 使用道具 举报
关于数据角标从0开始,可能是标准规定,为什么是标准,是因为大家都在使用SUM公司的开发工具,一直成为一个习惯,因而成为一种标准.
角标的开始 从0....一直到N-1.
   说白啦  从0开始在魔种函数上更有意义.


换句话说.你的技术还没有得到大家的认可,等到大家认可你的技术很牛时,那时刻的你也就是你一生的标准.呵呵

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
李复安 发表于 2013-6-12 12:23
数组是一段连续的空间,要求a就是求它的地址,然后找到它。
如果从0开始,则a的地址= 首地址 + i*每个数据 ...

谢谢,明白了
回复 使用道具 举报

不必客气,加油哈、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马