首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么数组都是从0开始编号

数组 数组两个特性 为什么数组都是从 0 开始编号,首先先了解一下数组的概念。 数组 Array 是一种线性表数据结构,是一组连续的内存空间,用来存储一组具有相同类型的数据。...数组具备以下特性: 线性表,是数据排列成像一条线一样的结构,每个线性表上的数据最多只有前和后两个方向。比如,除了数组,还有链表、队列和栈。...寻址公式 一维数组寻址公式: a[k]_address = base_address + k * type_size 二维数组寻址公式: 假设二维数组大小为 m*n,那么寻址公式为: a[i][j]_...得出计算公式: a[k]_address = base_address + k * type_size 结论 如果数组编号从 1 开始计数,那这个公式就会变为: a[k]_address = base_address...+ k * type_size a[k]_address = base_address + (k-1) * type_size 对比两个公式,如果从 1 开始编号,每次随机访问数组元素就多了一次减法运算

1.1K30

数组:为什么很多编程语言中数组都从0开始编号

但有利就有弊,这两个限制也让数组的很多操作变得非常低效,比如要想在数组中删除、插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。 数组是如何实现根据下标随机访问数组元素的?...但如果你是做一些非常底层的开发,比如开发网络框架,性能的优化需要做到极致,这个时候数组就会优于容器,成为首选。 为什么大多数编程语言中,数组要从 0 开始编号,而不是从 1 开始呢?...+ (k-1)*type_size 对比两个公式,我们不难发现,从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。...数组作为非常基础的数据结构,通过下标随机访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。...不过我认为,上面解释得再多其实都算不上压倒性的证明,说数组起始编号非 0 开始不可。所以我觉得最主要的原因可能是历史原因。

88330
您找到你想要的搜索结果了吗?
是的
没有找到

为什么很多编程语言中的数组都从0开始编号?——你真的了解数组吗?

数组是学习数据结构的开端。尽管数组看起来非常基础、简单,但是有多少人理解数组的精髓呢?...在大部分编程语言中,数组都是从0开始编号的,回想当年初学java,刚接触数组的时候,我就想过,为什么数组要从0开始编号,而不是从1开始呢?从1开始不是更符合人类的思维习惯吗?...六、为什么数组要从0开始编号,而不是从1开始 CPU性能考虑:从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。...+ (k-1)*type_size 对比两个公式,我们不难发现,从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。...数组作为非常基础的数据结构,通过下标随机访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。

55020

数据结构与算法学习笔记之 从0编号数组

前言 数组看似简单,但掌握精髓的却没有多少;他既是编程语言中的数据类型,又是最基础的数据结构; 一个小问题:  为什么数据要从0开始编号,而不是 从1开始呢?...如果是int类型的数据,data_type_size为4个字节; 数组和链表的区别 链表适合插入、删除,时间复杂度为O(1),数组适合查找,但是这里要注意一下,时间复杂度并不是O(1),即便是排好序的数组...n) 如果数组中的数据是有序的,我们在某个位置插入一个新的元素时,就必须按照刚才的方法搬移 k 之后的数据,如果数组中存储的数据并没有任何规律,数组只是被当作一个存储数据的集合。...1.希望存储基本类型数据,可以用数组 2.事先知道数据大小,并且操作简单,可以用数组 3.直观表示多维,可以用数组 4.业务开发,使用容器足够,开发框架,追求性能,首先数组。...为什么数组要从 0 开始编号

70030

SAP 自动编号维护SNRO

在开发中经常会遇到生成编号的需求,SAP提供了自动编号工具,能根用户需求设定并自动生成一组唯一的编号 ? ? ?...“编号长度域”:表示生成出来的编号需要使用什么样的数据类型来接收,这里使用CHAR10来接收,最长不超过10。...“%警告”:表示已产生的编号达到此百分比时给出警告 “编号范围事务”:可以指定一个事务码,通过执行此事务码可以进入该编号对象的维护页面 ? ?...一般编码都是在生产机中独立设置的,若需要传输本次编号范围的维护,需要在初始菜单中执行“范围”|“传输”命令,通过手工操作来生成传输请求号码。...在程序中通过函数 NUMBER_GET_NEXT 来获取编号对象所生成的流水码,每次调用都会产生一个新的编号: Data: nextnoTYPE char10.

1.8K10
领券