精华内容
下载资源
问答
  • 也不是所有的高级程序语言都是如此,比如Python数组下标就支持负数。

    也不是所有的高级程序语言都是如此,比如Python数组下标就支持负数。

    原因一:历史原因

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

    原因二:减少CPU指令运算

    (1)下标从0开始:

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

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

    (2)下标从1开始:

    数组寻址——arr[i] = base_address + (i -1)* type_size --公式(2)

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

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

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

    计算机主存被抽象成由多个连续字节大小的单元组成的数组(逻辑地址),每个字节都对应唯一的物理地址,第一个字节的地址为0。

    原因四:计算机组成原理

    无论是二进制还是十进制,都要表示数字1,只有N(N进制)的0次方才能产生数字1。

    展开全文
  • 假设有个数组int a[10],它的起始地址值0x1000(address),那么当你访问第n个数据时(即a[n]),实际上是通过其地址值获取对应位置的数据访问,如下图: 其寻址公式:result = address + 4 * n(4代表数据类型...

    数组特性

    数组的一大特性:随机访问,这个在实际开发中大家也经常使用到。

    数组地址

    如何理解随机访问?假设有个数组int a[10],它的起始地址值为0x1000(address),那么当你访问第n个数据时(即a[n]),实际上是通过其地址值获取对应位置的数据访问,如下图:

    其寻址公式为:result = address + 4 * n(4代表数据类型大小,int占4个字节);

    假设下标是从1开始,其寻址公式就变成: result = address + (n - 1)*4;

    一个是n一个是n-1,看上去没什么两样。注意不要忽视细节,n-1是一次运算,这也就是说,从0开始时,通过下标访问数组CPU就能减少一次运算,从而提高运行效率。兴许你会觉得这也算理由,一次小小的运算谈得上性能吗?但要是许多细节堆积在一起呢?细节往往决定成败。

    另一理由

    在网上看到过另外一个原因:历史原因。java有些地方是效仿了c语音,而c设计者用0作为数组起始下标,为了c开发者能够减少java的学习成本,故而java中的数组也是把0作为数组的起始下标。

    展开全文
  • 数组下标为什么0开始而不是从1开始

    万次阅读 多人点赞 2020-02-25 18:45:56
    如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度; 如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。 是不是前一种更好计算呢。 再举个例子: 1、数组在内存中申请是,所申请的内存是一段...

    数组是一段连续的空间,要求a[i]就是求它的地址,然后找到它。
    在这里插入图片描述

    如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;
    如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。
    是不是前一种更好计算呢。

    再举个例子:
    1、数组在内存中申请是,所申请的内存是一段连续的内存地址;
    2、例:int[] a=new int[3];申请一段:int 数据类型的数组,a 为变量,数组长度为:[3];
    3、这个数组所申请的内存地址是连续的
    (假设所申请的:第一个内存地址为:1008,第二个为:1009,第三个为:1010);
    但我们只知道:一、变量:a,它只拿到第一个内存地址1008;二、它的数组空间为3个;
    4、a[0]——把a拿到的内存地址:1008 + 0 = 1008 (指向第一个内存地址);
    a[1]——把a拿到的内存地址:1008 + 1 = 1009 (指向第二个内存地址);
    a[2]——把a拿到的内存地址:1008 + 2 = 1010 (指向第三个内存地址);
    所以:数据下标从 [0] 开始的意义也在于此!(当然,这是理解版的)。
    (备注):如果你写a[3],它就报错了,越界错误,因为你只申请了3个内存空间。

    展开全文
  • 数组下标为什么从零开始

    千次阅读 2019-04-03 11:34:24
    在我们日常的学习过程中,我们了解到在C++/JAVA/python中,数组下标是从0开始的。对于新手来说,遍历的数组的时候还真是容易出错。但是为什么要这样规定,这样规定有什么好处? 其实根据我们前辈的思想,这样规定的...

    在我们日常的学习过程中,我们了解到在C++/JAVA/python中,数组下标是从0开始的。对于新手来说,遍历的数组的时候还真是容易出错。但是为什么要这样规定,这样规定有什么好处?

    其实根据我们前辈的思想,这样规定的主要好处是方便“寻址”。这就要涉及到底层硬件的知识,我们知道程序运行时,变量的值,运算的结果值等都是暂时放在内存中。举个例子:int a = new int [5] 这是JAVA中常用的创建数组的程序语句。

    当这句话执行完毕后,机器都做了什么?

    首先在内存就开辟了一块地址空间(内存中地址空间都是连续的,地址中的内容就是你存储在其中的值),然后变量a就指向了这片地址空间的“首”地址,如果想要访问这片地址的其他地址,那么就得用偏移量来计算,如下图:
    在这里插入图片描述

    变量a已经指向首地址,a[0] = a + 0 ,0代表的就是偏移量,a偏移0个单位,就是其本身,所以a[0]代表的就是第一个地址。 a[1] = a + 1; a偏移一个单位,那么就可以访问到a[1],也就是第二个地址。所以只需要 变量名+[偏移量] ,(如 a[0]) 就可以访问到相应的内存地址。这是下标从0开始的情况。

    还有一些语言,如pascal , delphin 等下标都是从1开始的,这样的话访问地址就得用 变量名+[偏移量-1]来访问。或者首地址不存储值,只被变量名所指向,但这样就浪费了一个地址空间。

    所以C++/JAVA中 规定数组下标从0开始就是这样的原因,方便寻址,访问便捷。

    展开全文
  • 数组下标索引为什么0开始

    千次阅读 2020-08-17 21:26:17
    C语言数组下标是从0开始->Java也是->JavaScript也是。 降低额外的学习和理解成本。 原因二:减少CPU指令运算 (1)下标从0开始: 数组寻址——arr[i] = base_address + i * type_size 其中base_address...
  • C++/JAVA 的数组下标为什么0开始

    千次阅读 2017-12-05 10:38:52
    在我们日常的学习过程中,我们了解到在C++/JAVA中,数组下标是从0开始的。对于新手来说,遍历的数组的时候还真是容易出错。但是为什么要这样规定,这样规定有什么好处? 其实根据我们前辈的思想,这样规定的主要...
  • 这是因为在vue.js 里面的ajax.js文件内对数据进行了深度解析了,我们只需要 ... //在data当中存在数组的话需要加上{arrayFormat: 'brackets'} 否则提交时数组会显示下标 data = Qs.stringify(data,{arrayForma
  • 主要介绍了javaScript array(数组)使用字符串作为数组下标的方法,大家可以测试一下看看
  • JS获取字符串型数组下标的数组长度的代码,需要的朋友可以参考下
  • 数组下标为什么0开始

    万次阅读 2018-10-18 09:13:52
    为什么数组下标是从0开始,而不是从1开始呢?从1开始不是更符合人们的习惯么。 这个问题,稍后回答,先聊聊数组的基本特性。 数组(Array)一种线性表数据结构,用一组连续的内存空间,存储一组相同类型的数据 ...
  • 提出问题:为什么大多数语言中数组下标是从0开始的,为什么不是从1开始的呢?从1开始更符合人们的逻辑斯威  1>数组是一种线性数据结构,他需要一套连续的内存空间来分配,存储我们的数据,存储具有相同类型的...
  • 数组下标为什么0开始:a.初步理解:b.加深理解: 1.数组的由来: // 变量声明 int a = 1; int b = 2; int c = 3; int d = 4; ... int n = 20; // 一个int类型4个字节,一个字节占8位 a.字面引申: ...
  • 数组中存储的数据模型来看,下标最精确的意思是”偏移量“,a[0]的偏移量是0,即为首地址。a[i]的偏移量是i,寻址公式就是: a[i]的地址 = 首地址 + i*数据类型长度 如果下标从1开始,那对应的寻址公式是: a[i]的...
  • 众所周知,数组的一大优点...数组是如何实现根据下标随机访问数组元素的呢? 下面我们用一个长度5的int类型的数组为例,来看一下它的具体实现 https://uploader.shimo.im/f/l1upJJqvVl8DdrnW.png 如上图,数组为...
  • C语言数组元素下标为何从0开始

    万次阅读 多人点赞 2016-05-06 11:24:51
    很多同学可能在学习数组时会有这个疑问,下标为什么不从1开始呢?从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个。的确,有些计算机语言如早期的Pascal语言,数组元素的下标是从1开始的。...
  • 数组下标为什么是从0开始

    千次阅读 2017-08-30 10:49:08
    大家是否会觉得数组下标从0开始很烦,下标0开始就代表第一个,下标1就是第二个,是不是觉得特别别扭?那为什么会从0开始计呢? int[] a=new int[]{1,2,3,4,5};   这里有5个值,首先我们假设数组在内存中开辟的5...
  • 对于学习过编程语言的人来说,相信绝大多数人都会有这样的疑问:我们平时计数,通常是从一开始计数的,为什么在编程语言中,数组下标是从0开始计算的呢?  这是因为,C语言中,下标的含意是:当前元素到第一个...
  • PHP 多维数组下标0开始

    千次阅读 2018-03-16 17:13:12
    点击链接加入群【php/web 学习课堂】:https://jq.qq.com/?_wv=1027&k=5645xiw 欢迎大家加入,一起讨论学习 ... //自定义一个数组,模拟成在数据库里提取出来的 $array = [ '2018-3-2'=>
  • 1、创建数组 代码如下: var array = new Array();...//指定元素赋值 3、添加新元素 代码如下: array.push(item1,item2……itemN);//将一个或多个元素加入数组,返回新数组的长度 array.unshift(item
  • 未定义数组下标: 0

    千次阅读 2019-10-05 06:40:18
    在你的模块目录下的common.php文件中加入 error_reporting(E_ERROR | E_WARNING | E_PARSE); 转载于:https://www.cnblogs.com/niuzilong/p/11254292.html
  • 数组下标为什么要从0开始

    千次阅读 2013-11-08 21:47:19
    方便访问数组成员。 从0开始的话,只需用数组名(也就是数组地址),加上下标,只需要很简单的计算,就可以内存中准确访问到元素。 -----------------------------------------------------... //数组下标从2开始,到4
  • 今天在ajax中加了一个数据项目,不知道啥, 报错了’未定义数组下标: 0’, 搞了半天. 然后找到了一个方法. 就是在模块下的公共函数文件common.php函数外加入以下代码排除 ‘未定义数组下标: 0’ error_reporting(E...
  • 数组下标0开始

    千次阅读 2016-06-21 16:19:20
    数组下标 偏移量
  • HashMap之数组下标计算

    千次阅读 2020-08-21 13:58:01
    HashMap之原理初始化loadFactorcapacitythreshold数组下标计算 前提: HashMap是有数组+链表组成的,其中使用的算法有:hash(java8又使用了红黑树) 初始化 loadFactor loadFactor是参与计算HashMap扩容的一个加载...
  • [work] shell中数组下标访问

    千次阅读 2018-10-28 09:26:24
    shell中数组下标默认是从0开始的 1。将字符串放在数组中,获取其长度 #!/bin/bash str="a b --n d" array=($str) length=${#array[@]} echo $length for ((i=0; i<$length; i++)) do  echo $...
  • 数组下标为负数的问题(C语言)

    万次阅读 2018-08-20 12:25:21
    arr[-1]是合法的,他指向a[0]的前一个元素。 但是不建议这样书写,因为a[-1]的地址是不确定的, 可能会影响到系统运行。如果同上面一题一样加上指针,可以巧妙地解决某些问题。下面贴上代码段,帮助理解。 #...
  • 0821-数组的最大值及下标数组 时间限制: 1000 毫秒 内存限制: 32768 K字节 总提次数: 1145 次版权文档请勿...输入 第一个数为数组元素的个数 下一行为各元素的值 输出 第一个数为下标第二个数最大值两数间有一空格最
  • 数据结构 – 数组 概念 数组是一种线性表数据的结构,他用一组连续的内存空间,来存储一组相同数据类型的数据。 线性表:数据排列成一条线一样的结构。数据结构特点:存在一个唯一的没有前驱的(头)数据元素;存在一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 615,055
精华内容 246,022
关键字:

数组下标为什么0开始