原因一:历史原因 语言出现顺序从早到晚C、Java、JavaScript。 C语言数组下标是从0开始->Java也是->JavaScript也是。 降低额外的学习和理解成本。 原因二:减少CPU指令运算 (1)下标从0开始: 数组寻址——arr[i] = base_address + i * type_size(1) 其中base_address为数组arr首地址,arr[0]就是偏移量为0的...
从数组存储的内存模型来看,下标比较确切的定义是“偏移”,如果用a来表示数组的首地址,那么a[0]就表示偏移为0的位置。a[x]就表示偏移x个类型大小(int 4个字节)的的位置。java a[x]_address = base_address + x * data_type_size; 但是如果从1开始计数呢,那么寻址公式就变成:java a[x]_address = base_...
比如在Java里面的一个int数组,因为int是32位,在数组里面的第一个元素可以理解成是[0,32)这段区间内的值,因为起始位置是0,所以简单记为0即可,因为数组的类型长度都是固定的,比如int是32位,long是64位,所以通过起始位置+类型的长度就可以推算得到任何一个index的值,比如3下标的数据,可以通过[332,332+32)得到值...
数组的下标为什么从0开始而不是从1开始 数组是一段连续的空间,要求a[i]就是求它的地址,然后找到它。 如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度; 如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。 是不是前一种更好计算呢。 再举个例子: 1、数组在内存中申请...
如果从1开始 就要减去1,多一步运算,效率自然不让直接点高 所以数组的索引(下标)从0开始是为了方便计算每个元素的地址 如果从1开始的话,运算起来没有从0开始方便 所以,大部分编程语言数组索引都是从0开始 拓展 为什么计算机语言中的下标都是从0开始的? - 知乎 (zhihu.com)...
数组是一种很基础的数据结构,效率需要尽可能的高,所以为了减去一次减法操作,所以数组选择了从0开始编号而不是从1开始。 当然也并不是非0不可,有的语言甚至支持负数的下标,例如python。但是大多数都是从0开始编号,可能也和C语言以0作为下标有关,后面的语言或多或少的都借鉴了C语言。
数组下标说成是从0开始的是因为如果从1开始编号,每次随机访问数组元素都多了一次减法运算,对于cpu来说,就是多了一次减法指令。数组作为非常基础的数据结构,通过下标访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能的做到极致。从0开始,可以减少一次减法操作。
从0开始的话,只需用数组名(也就是数组地址),加上下标,只需要很简单的计算,就可以内存中准确访问到元素。 --- 像在pascal这样的语言中,数组下标是可由人去定的。如: var Arr: Array[2..4] of Integer; //数组下标从2开始,到4结束。 虽然pascal这样...
所以对于下标为 i 的数组元素,有寻址公式: &nums[i] = &nums + i * type_size; 我们说的下标 (index),其实是计算机寻址时相对于基地址的偏移量 (offset)。 在德国留学的老先生讲过,德国的电梯也是从 0 层开始计数的。也许在欧洲人眼中,楼层也是一种 offset。 那么,如果下标从 1 开始计数,寻址公式就...