"取0为开始"是某种意义上的编程语言规范,虽然不遵守这个规范的更多,甚至可能最开始就是从1开始的数组,但是在现在的语境下,使用0作为数组开头能够节省很多新语言的理解成本.
怼法进阶: 计数从0开始,是程序员偷懒的设定之一
写数组的时候,经常会涉及溢出问题,大多数人是这么解决的:
数组a长度n,每次操作取a[(count+1)%n]
发现没,count%n,就是取余操作
余数如果从1开始算,偶需要这么写才能让数组作取余, a[ count % n ], 但是a[n]=a[n%n]=a[0],那么偶就需要针对a[n]作特殊处理,也就是写一层 if, 就增加了代码量
怼法高级: 从操作系统原理来讲,数组的本质是一串连续的地址
数组中的a[n]所代表的数据的地址,其实是a的头地址+n*(数组代表的数据类型所占用的空间),鉴于老程序员一般要学习操作系统,要求了解系统底层,在系统层面上去理解代码的话,数组从0开始明显比从1开始更容易去理解.
现在的Python数组之所以支持多种数据类型,是因为Python数组有点类似编程中的"链表"技术,就是"需要的时候随机取走一块空间,通过逻辑地址的方法去索引",而不是像数组一样,直接从内存取走一大块固定的空间,通过物理的方法去索引修改.