概念
数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。这里我们要抽取出三个跟数组相关的关键词:线性表,连续内存空间,相同数据类型;数组具有连续的内存空间,存储相同类型的数据,正式该特性使得数组具有一个特性:随机访问。但是有利有弊,这个特性虽然使得访问数组变得非常容易,但是也是的插入和删除操作会变得很低效,插入和删除数据后为了保证连续性,要做很多搬迁工作。
数组中元素的访问
我们拿一个长度为10的数组来举例,int [] arr = new int[10], 在下面的途中,计算机给数组分配了一块连续的空间,100-139,其中内存的起始地址为baseAddress = 100
我们知道,计算机给每个内存单元都分配了地址值,通过地址来访问其数据,因此要访问数组中的某个元素时,首先要经过一个寻址公式计算要访问的元素在内存中的地址。
a[i] = baseAddress + i * dataTypeSize
其中,baseAddress = 100,dataTypeSize代表数组中的元素类型大小,在这个例子中,存储的是int类型数据,因此dataTypeSize = 4个字节
数组下标为什么从0开始
数组下标为什么要从0开始而不是从1开始呢?
从数组存储的内存模型上来看,“下标最确切的定义应该是偏移(offset)”。前面也讲到,如果用array来表示数组的首地址,array[0]就是偏移为0的位置,也就是首地址,array[k]就表示偏移k个type_size的位置,所以计算array[k]的内存地址只需要用这个公式:
arrar[k]_address = base_address + k*type_size
但是如果下标从1开始,那么计算array[k]的内存地址值会变成:
arrar[k]_address = base_address + (k-1)*type_size
对比两个公式,不难发现从数组下标从1开始如果根据下标去访问数组元素吗,对于CPU来说,就多了一次减法指令。
d
来源:https://www.cnblogs.com/zhushouyan/p/12024473.html