为什么除了 lua,数组索引基本都从 0 开始?很反人类的设计,很容易写出 bug

2024-03-24 00:20:33 +08:00
 drymonfidelia
15566 次点击
所在节点    程序员
105 条回复
ZIXT
2024-03-24 18:10:42 +08:00
感觉可以这么解释:
如果是数数,用 1 开头确实是自然的,因为“0 个”对应的是不存在,(最早数数的人类)自然不会用"第 0 个"指代某个存在的实体;
但当遇到“定位”的场合,举个例子:坐标轴,其原点一般都表示为(0,0),因为这里的 0 代表的是距离的数值,也就是偏移。而计算机寻址恰恰就是这种需要“定位”的场合(基址+偏移),而数组也是基于“定位“的思想而不是数数的思想设计的,所以数组的头部元素为[0]
maigebaoer
2024-03-24 18:15:20 +08:00
这个问题很经典,Google 搜下英文,🈶详细说明。
cccer
2024-03-24 19:11:10 +08:00
因为自然数就是从 0 开始,从 0 开始才是更合理的。
leonshaw
2024-03-24 19:13:16 +08:00
@maigebaoer 这个,Dijkstra 的 Why numbering should start at zero
https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html
cccer
2024-03-24 19:16:21 +08:00
再者编程语言由二进制机器码发展而来,0 和 1 组成,自然而然是从 0 开始计数。
ttvast
2024-03-24 20:08:17 +08:00
不从 0 开始计数已经为人类生活带来了很多麻烦了,所以计算机语言里用 0 做第一个下标的做法是很有智慧的。
1 走到 6 层楼楼梯阶数并不是走到 3 层楼的两倍
2 公元一年和公元前一年只相差 1 年,而不是 2 年
DIO
2024-03-24 20:15:22 +08:00
计算机底层思维是这样,硬件 0 就是地址 0 。
YsHaNg
2024-03-24 20:47:27 +08:00
@julyclyde 英国电梯按钮写 0 和 g 的都有 但肯定没有直接从 1 开始的
James369
2024-03-24 21:09:40 +08:00
为了方便程序逻辑,特别是 C 语言的内存地址操作
memorycancel
2024-03-24 22:08:54 +08:00
看了一下 17 楼 喷到点子上了- -
Jirajine
2024-03-24 22:59:45 +08:00
@BeautifulSoap #17 你这样你说反倒体现了 0 index 的问题所在,array 本身被模糊和滥用了。
memory chunk 和 collection 是两种 sematic,他们俩不应该共用同一种 syntax ,也就是不应该把 p.offset(a) 和 p.index(a)都共用 p[a]。
boatrain1111
2024-03-25 09:27:04 +08:00
我觉得从 0.5 开始最好
shuax
2024-03-25 09:42:13 +08:00
matlab:你好
vincent7245
2024-03-25 10:09:37 +08:00
我想起了好多年前的一个下午,关于大端和小端的激烈讨论
MoYi123
2024-03-25 10:12:18 +08:00
dijkstra 关于这个写过文章, 可以看看.
https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html
myderr
2024-03-25 10:14:09 +08:00
错误的,E 也是从 1 开始。
wanguorui123
2024-03-25 10:16:49 +08:00
在计算机里 0 是有意义的,0 既然被存储,那就不能被浪费,所以从 0 开始最省空间和计算资源
whyso
2024-03-25 10:30:34 +08:00
说归说,别动不动就反人类,你能代表谁啊?
lawlyet666
2024-03-25 10:50:04 +08:00
哈哈哈,"几十万哥"
126ium
2024-03-25 10:54:15 +08:00
@hello2090 可能他外包干太多?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1026418

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX