一、数组下标从0开始的原因

在回答这个问题之前我们首先要明确一点那就是对于数组元素的访问在操作系统层其实就是对特定内存偏移量的数据的访问,换而言之即如果想要访问一个数组的某一个元素的值那么首先就要计算它的地址偏移量 ,其大概的公式为:

a[k]_adress = base_address + k*type_size ;

,倘若数组下标是从1开始那么地址计算公式即会转变为:

a[k]_adress = base_address + (k-1)*type_size ;

这对于CPU来说多了一次减法操作,对于那些对性能要求特别高的程序来说就是一个不小的性能影响因素。所以数组下标一般都是从0开始,另外的一个原因则是C语言数组下标便是从0开始的,后面的高级编程语言包括 java、C++、javascript等都在一定程度 上效仿了C语言。

为什么数组的下标是从0开始而不是从1开始?相关推荐

  1. 数组的下标为什么从0开始而不是从1开始

    数组是一段连续的空间,要求a[i]就是求它的地址,然后找到它. 如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度: 如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数 ...

  2. 790-C语言的数组元素下标为何从0开始?

    C语言的数组元素下标为何从0开始? 我们在学习数组时会有这个疑问,数组元素的下标为什么不从1开始呢? 从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个. 的确,有些计算机语言如 ...

  3. 数组的下标为什么从0开始

    部分来源于其他博客 为什么数组的下标是从0开始,而不是从1开始呢?从1开始不是更符合人们的习惯么. 数组(Array)一种线性表数据结构,用一组连续的内存空间,存储一组相同类型的数据 线性表(Line ...

  4. C语言数组元素下标为何从0开始

    很多同学可能在学习数组时会有这个疑问,下标为什么不从1开始呢?从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个.的确,有些计算机语言如早期的Pascal语言,数组元素的下标是从 ...

  5. c语言未初始化的指针下标访问是0,C语言的二数组的指针访问.doc

    C语言的二数组的指针访问 二维数组的指针访问 --王炳华 指向二维数组的指针及用指针访问二维数组,是学习指针的最大难点.如果真正弄懂了这个问题,就可以说你学会了使用指针. 二维数组的指针 指针就是地址 ...

  6. java数组下标0_Java语言中数组元素下标从0开始。

    [单选题]规范规定,硅酸盐水泥的初凝时间不小于( ). [判断题]打开/关闭"对象追踪"的功能键是F11. [判断题]break语句的作用是结束当前的循环体. [单选题]项目标识代 ...

  7. 为什么数组的下标从 0 开始?

    微信搜索 [微观技术],关注这个不喜欢内卷的程序员. 精彩文章汇总 GitHub https://github.com/aalansehaiyang/technology-talk ,Star 12K ...

  8. java数组最大下标_【Java视频教程】day09-面向对象

    面向对象介绍 面向对象引入 需求:求数组{1,2,3,4,8,7,6,5}的最大值: public static void main(String[] args) {// 需求:求数组{1,2,3,4 ...

  9. java规定数组的下标_Java数组元素下标的范围是

    Java数组元素下标的范围是 答:0~数组名.length-1 关于产妇产褥期临床表现,下列哪项是正确的 答:母乳喂养可以促进子宫复旧 不属于社会主义时期我国政治生活的主题是( ) 答:解决敌我矛盾 ...

最新文章

  1. php经典操作,php数组的经典操作(遍历数组、基本操作)实例
  2. 大专生质问马云:你说招聘从不看文凭,为什么我投阿里石沉大海
  3. html 怎么让tr的css覆盖td的_html表格标签
  4. python三十六:shelve模块
  5. 关于MFC单选框的使用临时记录,稍后编辑
  6. 《C++游戏编程入门(第4版)》——1.11 问题讨论
  7. html分类页面,CSS网页设计 把HTML标记分类
  8. 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes
  9. Excel中的图片,突然全部消失不见,如何解决
  10. cognos transformer 建一个85w数据的cube所用的时间,接优化
  11. Cookie, Session, LocalStorage, SessionStorage, Etag, Expire
  12. linux升级内核5.10 网卡无法启动,博通网卡在Linux 5.10内核下无法搜索到无线网络的解决...
  13. 论文阅读笔记(audio-visual相关)—Co-Separating Sounds of Visual Objects
  14. 自然语言处理领域介绍
  15. mysql数据库交互界面_MySQL数据库界面化工具 - Navicat的常用功能
  16. 机器学习可行性与VC dimension
  17. 【Linux】【GPU】linux上如何查看GPU的运行情况?
  18. vue在微信里面的兼容问题_vue 微信浏览器缓存问题解决方案
  19. 设计模式之举例说 设计原则
  20. 365天挑战LeetCode1000题——Day 097 神策专场: 判定是否互为字符重排 按身高排序 按位与最大的最长子数组 找到所有好下标 好路径的数目

热门文章

  1. JAV入门之IDEA的快捷键与辅助键 笔记(9)
  2. Java讲师兼职课时费,用JAVA编程运算课时费计算=总课时数*单位课时酬金
  3. 深入解析AAVE智能合约:计算和利率
  4. nginx location 配置path,如不带斜杆访问,出现异常
  5. 200826-C语言打印文件中的文本内容
  6. 初中使用计算机教学反思,初中信息技术教学反思(通用5篇)
  7. 为什么终结符只有综合属性?
  8. MySQL 安全方案设计
  9. Pytorch 含并行连结的网络 GoogLeNet
  10. Flash 与数学:星形线