精华内容
下载资源
问答
  • 数组的下标为什么从0开始而不是从1开始.pdf
  • 算法-数组的下标为什么从0开始而不是从1开始.rar
  • 数组的下标为什么从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个内存空间。

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

    千次阅读 2019-01-12 14:11:34
    数组(Arrary)是一种线性表数据...如果用a来表示数组的首地址,a[0]就是偏移为0的位置,也就是首地址,a[k]就表示偏移k个type_size的位置,所以计算a[k]的内存地址只需要用公式: a[k]_address = base_address ...

    数组Arrary)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

    从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。如果用a来表示数组的首地址,a[0]就是偏移为0的位置,也就是首地址,a[k]就表示偏移k个type_size的位置,所以计算a[k]的内存地址只需要用公式:

    a[k]_address = base_address + k * type_size;

    但,如果数组从1开始计数,那公式的k就要做相应的改变了:

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

    对比两个公式,我们发现,如果从1开始编号,每次随机访问数组元素都多了一次减法运算,对于cpu来说,就是多了一次减法指令。

    数组作为非常基础的数据结构,通过下标访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能的做到极致。从0开始,可以减少一次减法操作。

     

     

    展开全文
  • C++/JAVA 的数组下标为什么从0开始

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

    在我们日常的学习过程中,我们了解到在C++/JAVA中,数组下标是从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开始就是这样的原因,方便寻址,访问便捷。

    展开全文
  • 假设有个数组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开始

    千次阅读 2020-08-17 21:26:17
    也不是所有的高级程序语言都是如此,比如Python数组下标就...(1)下标从0开始: 数组寻址——arr[i] = base_address + i * type_size 其中base_address为数组arr首地址,arr[0]就是偏移量0的数组,即数组arr首地.
  • 数组下标为什么从0开始?.pdf
  • 数组下标为什么从0开始:a.初步理解:b.加深理解: 1.数组的由来: // 变量声明 int a = 1; int b = 2; int c = 3; int d = 4; ... int n = 20; // 一个int类型4个字节,一个字节占8位 a.字面引申: ...
  • 数组下标为什么从0开始

    千次阅读 2017-08-30 10:49:08
    大家是否会觉得数组下标从0开始很烦,下标0开始就代表第一个,下标1就是第二个,是不是觉得特别别扭?那为什么会从0开始计呢? int[] a=new int[]{1,2,3,4,5};   这里有5个值,首先我们假设数组在内存中开辟的5...
  • 数组下标为什么从开始

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

    万次阅读 2018-10-18 09:13:52
    为什么数组的下标从0开始,而不是从1开始呢?从1开始不是更符合人们的习惯么。 这个问题,稍后回答,先聊聊数组的基本特性。 数组(Array)一种线性表数据结构,用一组连续的内存空间,存储一组相同类型的数据 ...
  • 数组下标为什么从0开始

    千次阅读 2013-11-08 21:47:19
    从0开始的话,只需用数组名(也就是数组地址),加上下标,只需要很简单的计算,就可以内存中准确访问到元素。 -------------------------------------------------------- 像在pascal这样的语言中,数组下标是可由...
  • 文章目录列表的下标为什么开始为什么列表append比insert快列表append之后,id值为什么不变,也可以说内存地址不变 列表的下标为什么零开始 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体...
  • 如果下标从1开始,那对应的寻址公式是: a[i]的地址 = 首地址 + (i-1)*数据类型长度 对CPU来说,每次随机访问,就多了一次运算,多发一条指令。 上面的解析,算不上压倒性的证明,还有很大一部分原因是因为程序界...
  • 对于学习过编程语言的人来说,相信绝大多数人都会有这样的疑问:我们平时计数,通常是从一开始计数的,为什么在编程语言中,数组的下标从0开始计算的呢?  这是因为,C语言中,下标的含意是:当前元素到第一个...
  • C语言数组元素下标为何从0开始

    万次阅读 多人点赞 2016-05-06 11:24:51
    很多同学可能在学习数组时会有这个疑问,下标为什么1开始呢?1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个。的确,有些计算机语言如早期的Pascal语言,数组元素的下标1开始的。...
  • 也不是所有的高级程序语言都是如此,比如Python数组下标就支持负数。
  • 从上面图示我们来分析: 假设下标1开始:我们要想获取第3个值得话 首地址(1000)+ (3-1)*4(数据类型占用的内存) = 1008 第三个内存地址的位置 驾驶下标从0开始:我们想获取第3个值得花 首地址(1000)+ 2 *4...
  • 数组下标从0开始

    千次阅读 2016-06-21 16:19:20
    数组下标 偏移量
  • oracle substr 下标从0 开始

    千次阅读 2018-08-27 09:01:15
    substr 下标从0 开始 instr 返回的数值,从1开始   oracle字符串处理 select substr(memo,instr(memo,'hourid=',1)+1,instr(memo,'&',instr(memo,'=',1)+1)-instr(memo,'=',1)-1) from ZCSTATITEM ...
  • 提出问题:为什么大多数语言中数组的下标从0开始的,为什么不是从1开始的呢?从1开始更符合人们的逻辑斯威  1>数组是一种线性数据结构,他需要一套连续的内存空间来分配,存储我们的数据,存储具有相同类型的...
  • 曾经有人在Twitter上问我为什么Python使用以0为首位的数组索引法(0-based),并且还给我了一个相关优秀文章的链接。这让我想起许多往事:Python的前身之一,ABC语言使用的是以1为首位的数组索引方式(1-based),而对...
  • c代码-anki--冒泡排序,下标从0开始

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 361,126
精华内容 144,450
关键字:

下标为什么从0开始