sun_chuan 发表于 2023-8-18 13:43:03

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

关于这个问题,没有明确的答案,我搜集整理了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
显然,第二种写法更美观,第一种,让人觉得很别扭
页: [1]
查看完整版本: 【转载】为什么c/c++等编程语言中,索引都是从0开始