详细讲解为什么数组记录地址的时有的下标为1有的为0

计算机无论是记文件的地址也好,记什么都只记录首地址,数组中第一个地址就是和数组中第一个数的地址重合 所以数组下标从0开始

计算机只记录开头比特点(第一个字节的地址)的地址 即物理存储单元的地址 每一片区域第一个字节的地址

原因:

      • 比如只记录这的地址
      • 计算机取值的时候 int类型数组 每个占四字节
      • 设第一个为x 则第n个就是 x+4*(n-1)
      • 其他类型同理

 理解版本

数组在内存中申请是,所申请的内存是一段连续的内存地址;

例:int[] a=new int[3];申请一段:int 数据类型的数组,a 为变量,数组长度为:[3];

这个数组所申请的内存地址是连续的(假设所申请的:第一个内存地址为:1008,第二个为:1009,第三个为:1010);,但我们只知道:一、变量:a,它只拿到第一个内存地址1008;二、它的数组空间为3个;

a[0]——把a拿到的内存地址:1008 + 0 = 1008 (指向第一个内存地址);

a[1]——把a拿到的内存地址:1008 + 1 = 1009 (指向第二个内存地址);

a[2]——把a拿到的内存地址:1008 + 2 = 1010 (指向第三个内存地址);

所以:数据下标从 [0] 开始的意义也在于此!在获取的时候不用再长度减1了(当然,这是理解版的)。

为什么有的语言下标为0有的语言下标为1 

经过反编译发现在汇编中获取地址是(eax为数组下标)

c#,c++,c(下标从0开始):mov [edx+eax*4 + 08],ecx, 0*4+8(起始地址)

易语言和lua(下标从1开始):汇编步骤太多就不贴了 为: 1*4+4 (起始地址)

从汇编语句的多少都可以看出,下标为0更符合计算机的计算方式,但是下标为1更加符合人的习惯容易入门

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值