鱼C论坛

 找回密码
 立即注册
查看: 820|回复: 0

[技术交流] 【转载】为什么c/c++等编程语言中,索引都是从0开始

[复制链接]
发表于 2023-8-18 13:43:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于这个问题,没有明确的答案,我搜集整理了3个我认为比较具有说服力的理论,分别是

节省空间论
硬件初始状态论
上届,下届差值论
1. 节省空间论
节省空间论强调,从0开始有利于节省内存空间,假如有4个元素,如果索引从0开始,那么最大索引就是3,如果索引从1开始,最大索引就是4

索引从1开始的十进制为:(1,2,3,4),对应的二进制为(1,10,11,100)

索引从0开始的十进制为:(0,1,2,3),对应的二进制为(0,1,10,11)

显然,从索引1开始计数,会多使用一个bit位,在过去那种内存十分昂贵的年代,这是不被接受的,因此从一开始,索引就是从0开始的,后来大家都习惯了,即便内存很便宜了,大家还是从0开始计数索引

2. 硬件初始状态论
其实和前面的节省空间论说的是一回事,不过是从硬件层面做了解释,计算机底层是0和1,0和1又依靠硬件二极管的电位变化来表示,初始状态下,用于计数的所有二极管都处于低电位,正好是0,因此索引从0开始计数

3. 上届,下届差值论
前面两个虽然有一定道理,但是理解起来有点费力,第3个理论认为,索引的上届和下届的差值应该等于数列的长度,假设一个数列有N个元素,如果索引从1开始,那么描述索引的上届和下届就得这么写

1 <= i < N+1
如果索引从0开始,就可以这样写

0 <= i < N
显然,第二种写法更美观,第一种,让人觉得很别扭
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-5 22:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表