数组的 4 个基本元素:数组名称、数组元素、元素下标、数据类型

数组(Arrary)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据(方便寻址)。

原因一:历史原因

语言出现顺序从早到晚C、Java、JavaScript。C语言数组下标是从0开始->Java也是->JavaScript也是。降低额外的学习和理解成本。

原因二:减少CPU指令运算

①下标从0开始:

数组寻址:arr[i] = base_address + i * type_size

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

②下标从1开始:

数组寻址:arr[i] = base_address + (i-1) * type_size

比较两个计算公式可以发现公式②每次CPU寻址需要多一次 i-1的操作,即多了一次减法的指令运算。

对于数组这种基础数据结构,无论在哪种高级程序语言中,都是频繁间接(作为容器的基础数据结构,比如Java的ArrayList)或者直接被使用的,因此要尽量减少其消耗CPU资源。

原因三:物理内存的地址是从0开始的

计算机主存是多个连续字节大小的单元组成的数组,每个字节都对应唯一的物理地址,第一个字节的地址为0。

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

  1. c++ 不能分配给为0的数组_【嵌入式C】你有想过quot;数组下标quot;为何从0开始吗?...

    1.聊一聊 相信大家都有看过电影,今天所分享的是其经典背景音乐,或许音乐响起你又会想起那条单纯.善良的秋田犬! 今天跟大家聊聊一个有意思的话题,C中的数组下标为啥是从0开始?或者说为什么现在大部分的编 ...

  2. 数组下标索引为什么从0开始

    也不是所有的高级程序语言都是如此,比如Python数组下标就支持负数. 原因一:历史原因 语言出现顺序从早到晚C.Java.JavaScript. C语言数组下标是从0开始->Java也是-&g ...

  3. matlab返回数组下标,matlab中如何将数组下标定义为从0开始

    楼主不是想保留0:3这个信息?如果是的话,可以用结构数据来保存,或者是令k=0:3,然后显示的时候为t(k+1)不就行了.又或者编个函数,转换一下www.mh456.com防采集. 这个是没法直接修改 ...

  4. Fortran 语言数组下标默认从1开始,C/C++/Java等其他语言默认从0开始

    昨天看到一个有意思的问题,为什么在我们遇到的大多数编程语言里面,数组的下标基本都是从0开始? 这是一个简单的问题,很少人会有人去思考为什么,但这里面其实是有一定的数学逻辑在里面.像目前主流的编程语言C ...

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

    对于学习过编程语言的人来说,相信绝大多数人都会有这样的疑问:我们平时计数,通常是从一开始计数的,为什么在编程语言中,数组的下标是从0开始计算的呢? 这是因为,C语言中,下标的含意是:当前元素到第一个元 ...

  6. python数组下标访问起始_为什么数组下标从0开始

    背景 有很多编程语言的数组都是从 0 开始编号,你是否下意识地想过,为什么数组要从 0 开始编号,而不是从 1 开始呢? 从 1 开始不是更符合人类的思维习惯吗?那先看下数组的定义. 数组(Array ...

  7. 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)开始)

          首先,我们看到这篇文章的题目,我们就会想到之前的那个题目 -- 连续子数组最大和问题.这个问题无疑就是把原问题扩展到二维的情况.       想起来这个问题也不是很难,我们可以求解一维矩阵 ...

  8. 【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )

    文章目录 一.使用 数组下标 或 指针 操作字符串 1.使用 数组下标 操作字符串 2.使用 char * 指针 操作字符串 二.代码示例 一.使用 数组下标 或 指针 操作字符串 1.使用 数组下标 ...

  9. 增加数组下标_数组以及ArrayList源码解析

    点击上方"码之初"关注,···选择"设为星标" 与精品技术文章不期而遇 前言 前一篇我们对数据结构有了个整体的概念上的了解,没看过的小伙伴们可以看我的上篇文章: ...

最新文章

  1. 您的用户配置文件没有正确加载
  2. 【联邦学习】FATE 集群部署 step1
  3. pip 指定路径安装工具包
  4. Visual Studio 2017 15.3 已发布,增加.NET Core 2 支持
  5. 使用god来自动启动崩溃的进程
  6. html圆圈复选框的代码,单选、复选框Demo
  7. Eclipse SVN插件版本
  8. 1.2 iostream库简介
  9. vs 2010下载地址
  10. 晶体管电路设计学习笔记(一)
  11. NR: PointA,offsetToPonitA,kSSB三者关系。
  12. 字节架构师发布“绝版”Java并发实现原理剖析JDK源码
  13. 哪款蓝牙耳机音质好?2022音质好的蓝牙耳机盘点
  14. 人工智能急需变革?比起英特尔的焦虑,互联网企业更想蹚这一池芯片水...
  15. 高尔夫球场难度系数_在高尔夫球场上表现出色
  16. linux如何解压.z文件,linux文件解压缩命令(史上最全教程)
  17. 计算机病毒三级品为最高级,威尔逊“政治与行政两分法”的思想主要受益于( )...
  18. 老子道德经81章全文及解释
  19. Android 刷机/Root/安装Xposed
  20. AMBA AXI 协议

热门文章

  1. mtcnn人脸检测(python)
  2. 实践学习PaddleScience飞桨科学工具包
  3. OA办公系统如何实现多维智能提醒
  4. presto cli 命令行使用
  5. 异常派生exceptions must derive from BaseException
  6. 行式存储和列式存储的区别
  7. 史上最好用的云盘 - OneDrive介绍(附带15G推荐链接)
  8. 关于EL的理解(一)
  9. win10开机蓝屏_电脑用户遇到蓝屏ACPIBIOSError应该如何解决?
  10. 直线回归和相关------(六)协方差分析