数组下标为什么从0开始

定义一个数组:    int[] a=new int[5]

           数组在内存中是一个连续的存储空间 这个空间有一个首地址 也就是第一个元素所在的地址,比如说是1a2b3c4d
        那么这个a实际是数组变量 它存的只是个地址,它不能把整个数组都存进去没有那么大的地方,
        也就是a--->1a2b3c4d  也就是说通过a变量可以找到这个数组,
        再说 数组下标为什么从0开始计算,从1开始不是更符合计数习惯,
        对于数组来说下标从0开始好计算,比如 a数字的地址是1000 
        a[0]代表a数组的第一个元素,系统要先找到这个元素,首先要计算出这个元素的地址,
        计算方式  1000+0*4  4代表int四个字节  结果是1000  那么a[0]的地址就是1000,
        同时 a[1]的地址 1000+1*4=1004   
                 a[2]的地址 1000+2*4=1008
                 a[3]的地址 1000+3*4=100C (地址是16进制 10=A 11=B 12=C 13=D 14=E 15=F)
如果下标从1开始计算的话
a数组的首地址 是1000 计算第一个元素的地址的时候就是 a[1]=1000+(1-1)*4=1000  
那么a[2]的地址就是  1000+(2-1)*4=1004  所以每次计算下一个地址
都要进行-1操作 就不如用0计算起来速度快 从0开始提高了访问数组元素的效率
(1)下标从0开始:

    数组寻址——arr[i] = base_address + i * type_size(1)
    其中base_address为数组arr首地址,arr[0]就是偏移量为0的数组,即数组arr首地址;i为偏移量,
     type_size为数组类型字节数,比如int为32位,即4个字节。

(2)下标从1开始:
     数组寻址——arr[i] = base_address + (i -1)* type_size(2)
     比较两个计算公式可以发现公式(2)每次CPU寻址需要多一次 i-1的操作,即多了一次减法的指令运算
        
偏移地址解释:
        偏移地址应用在Java的数组中。当你声明一个数组时,栈空间储存这个数组名,但没有内存地址;
        当你实例化这个数组时,JVM会在堆空间中分配一块连续的空间保存数组,
        但是JVM并不会给这个数组中的每一个元素分配一个地址,只会给这个数组分配一个首地址,
        然后栈空间中的数组名指向这个首地址。数组中的每一个元素的地址实际上是相对数组首地址的偏移量。
        即数组元素是以偏移地址的形式访问的。

更多免费技术资料可关注:annalin1203

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值