这是一种错误的教学倾向。更极端的是部分信息学竞赛选手还会养成分配数组总是多分配5个10个甚至100个的奇怪习惯,目的是为了防止越界,而不是自己想清楚程序下标的边界——越界访问经常伴随着算法也有问题。
如果确实非常想用从1开始的下标,还有一种办法是分配arr[n],使用时则用ptr=arr-1来做下标访问,这样ptr的下标范围就是1到n。这个技巧来自numeric recipe,我揣测目的是为了方便匹配数学文献的公式(下标一般从1开始)。但必须指出这种技巧也是不妥的,在C/C++中是undefined bahavior,因为不能保证数组前一个元素的地址是存在的或者可访问的,尽管绝大多数情况这办法能用。
无论如何,习惯了闭开区间记法后,其实是利大于弊的。比如把n个元素的数组均分,那就是 [0,n/2) 和 [n/2,n) 两块。用双闭区间下标 1 开始就变成了 [1, n/2] 和 [n/2+1, n]。这种 +1 运算太频繁了,其实很容易出问题。数学文献中就因为用闭区间下标导致频繁出现 +1,其实是很烦的。
【 在 il15 的大作中提到: 】
: 你没看我前面的,她们老师分配空间的时候让她们这样:int a[n+1];
:
: 【 在 softsongs 的大作中提到: 】
: ...................
--
FROM 114.249.199.*