当前位置: 首页 > >

数组下标为什么从零开始

发布时间:

在我们日常的学*过程中,我们了解到在C++/JAVA/python中,数组下标是从0开始的。对于新手来说,遍历的数组的时候还真是容易出错。但是为什么要这样规定,这样规定有什么好处?


其实根据我们前辈的思想,这样规定的主要好处是方便“寻址”。这就要涉及到底层硬件的知识,我们知道程序运行时,变量的值,运算的结果值等都是暂时放在内存中。举个例子:int a = new int [5] 这是JAVA中常用的创建数组的程序语句。


当这句话执行完毕后,机器都做了什么?


首先在内存就开辟了一块地址空间(内存中地址空间都是连续的,地址中的内容就是你存储在其中的值),然后变量a就指向了这片地址空间的“首”地址,如果想要访问这片地址的其他地址,那么就得用偏移量来计算,如下图:


变量a已经指向首地址,a[0] = a + 0 ,0代表的就是偏移量,a偏移0个单位,就是其本身,所以a[0]代表的就是第一个地址。 a[1] = a + 1; a偏移一个单位,那么就可以访问到a[1],也就是第二个地址。所以只需要 变量名+[偏移量] ,(如 a[0]) 就可以访问到相应的内存地址。这是下标从0开始的情况。


还有一些语言,如pascal , delphin 等下标都是从1开始的,这样的话访问地址就得用 变量名+[偏移量-1]来访问。或者首地址不存储值,只被变量名所指向,但这样就浪费了一个地址空间。


所以C++/JAVA中 规定数组下标从0开始就是这样的原因,方便寻址,访问便捷。



友情链接: