光之晨曦🌟🌟🌟

vuePress-theme-reco 晨曦    2021 - 2022
光之晨曦🌟🌟🌟 光之晨曦🌟🌟🌟

Choose mode

  • dark
  • auto
  • light
首页
前端开发
  • CSS
  • FrontEnd
  • GraphQL
  • JS基础语法
  • JavaScript
  • TypeScript
  • Vue
  • Webpack
  • 数据结构与算法
  • 浏览器相关
  • 推荐文档
JS指南
  • JS基础相关
  • ECMAScript 6
  • OOP面向对象编程
  • JavaScript设计模式
前端框架
  • Vue相关

    • Vue基础相关
    • Vue官方生态
    • Vue.js的设计核心
性能优化
  • 前端缓存

    • HTTP缓存
    • 数据缓存
    • 离线缓存
    • CDN缓存
  • 优化方案

    • SEO方向的优化方案
    • Webpack的性能优化
    • Canvas性能优化方案
    • 了解常见的Web、App性能优化方案
    • React、Vue框架使用性能优化方案
前端工程化
  • 部署
  • Git
  • Vite
  • WebPack
第三方拓展
时间线
关于
GitHub
author-avatar

晨曦

82

文章

61

标签

首页
前端开发
  • CSS
  • FrontEnd
  • GraphQL
  • JS基础语法
  • JavaScript
  • TypeScript
  • Vue
  • Webpack
  • 数据结构与算法
  • 浏览器相关
  • 推荐文档
JS指南
  • JS基础相关
  • ECMAScript 6
  • OOP面向对象编程
  • JavaScript设计模式
前端框架
  • Vue相关

    • Vue基础相关
    • Vue官方生态
    • Vue.js的设计核心
性能优化
  • 前端缓存

    • HTTP缓存
    • 数据缓存
    • 离线缓存
    • CDN缓存
  • 优化方案

    • SEO方向的优化方案
    • Webpack的性能优化
    • Canvas性能优化方案
    • 了解常见的Web、App性能优化方案
    • React、Vue框架使用性能优化方案
前端工程化
  • 部署
  • Git
  • Vite
  • WebPack
第三方拓展
时间线
关于
GitHub

数组为什么从 0 开始编号

vuePress-theme-reco 晨曦    2021 - 2022

数组为什么从 0 开始编号

晨曦 2020-04-15

# 数组是一种线性表数据结构

线性表(Linear List),就是数据排成一条像线一样的结构,每个线性表上的数据最多只有前和后两个方向。链表,队列,栈等也是线性表结构。

非线性表,如二叉树,堆,图等,数据之间不是简单的前后关系。

# 数组随机访问

a[i]_address = base_address + i * data_type_size

通过公式计算出数组下标对应的内存地址,从而实现随机访问

# 为什么从 0 开始编号

从数组存储的模型看,“下标”最确切的定义是“偏移(offset)”。

如果从 1 开始编号

a[k]_address = base_address + (k-1) * data_type_size

  • 每次随机访问都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令
  • C 语言设计者用 0 开始计数数组下标,之后的语言都效仿了 C 语言,为了在一定程度上减少学习成本
编辑