新手问题:为什么【数组】下表要从0开始不从1开始? Delphi的数组下标是从1开始的,而java和C++中的数组下标都是从0开始的,那么从0开始到底有什么好处呢?哪位前辈可以给点提示? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在C中是有意义的.就是地址位置.开始的java程序员是从C程序员过渡来的,就延用了C中的下标0开始.后来知道没意义了.加了个(for:each)只不过原来的总不能扔吧,那么多人都用习惯了..这就是所谓的向前兼容..所以越走包袱会越重 看不出有什么好处。好像pascal也是由1开始了。难道是古老语言 向新语言的转变。 在JAVA中允许数组长度为0.在编写一个结果为数组的方法时,如果碰巧结果为空,那么这种语法形式就显得非常有用。此时可以创建一个长度为0的数组:new elementType[0]. 从0开始就是为了计算内存地址快捷。c++中:int[] a=new int[10];a[0]的地址就是a+0;a[1]的地址就是a+1;a[2]的地址就是a+2;计算机的cpu处理数据时,都要从内存打交道,数据要从内存中取,结果要放到内存中,而存取数据要知道内存地址才行,所以寻址快,则存取速度也就快,程序的效率也就高。 二进制01,四进制0123,八进制01234567,十进制0123456789,十六进制0123456789ABCDEF,所有的这些数学上的计数方法,都是从0开始。 delphi,用的时候感觉一点都不爽,delphi以人的思维重整了一把,从一开始。从0开始有好处。for (i,i<边界,条件触发)从1开始还要多写个<=号,多了一层含义,遍历不刺激呀!0 +op肯定是 有序 op位,有序地址寻址方便。 从1开始为什么不好呢?计算机在内存找a[i]时,地址要这样算:a+i-1,多了一次减法.想不多也可以,那a指向的空间的第一个单元不用,从第二个单元开始算数组的第一个元素, 这样浪费一个单元的空间。所以c++要从0开始。java也一样道理。 纠正下楼主:delphi里,固定数组下标可以定义为从任何数开始,默认是0,动态数组下标是从0开始。 ZangXT大侠可以指点指点这个问题么? 在 C 语言当中,数组变量 a 指向的地址就是第 1 个元素的地址,所以第 1 个元素的地址就是:a + 0 * 元素大小如果把 0 改为 1,那么计算每个元素地址的时候就必须先对下标减一。这就带来不必要的麻烦。总之,数组下标不是指序号,而是是数组元素相对于数组开头的偏移量。 请问谁知道在treegrid控件后面加gantt图吗 JAVA WEB MVC结构为什么要分那些包?? 关于网页内容提取? JBuilder 中的 DataExpress 控件和 dbswing 控件的问题(急) 超古怪的问题! Header 字段里没有location 吗 一个很好解决的问题 有分可拿 新手求助,白得分!! 如何在发送一个数据给对方的时候,获得对方IP? Java下能够实现CAN通信吗?性能怎么样? 请问swing如何改变控件位置呢 appletviewer 问题
开始的java程序员是从C程序员过渡来的,就延用了C中的下标0开始.
后来知道没意义了.加了个(for:each)只不过原来的总不能扔吧,那么多人都用习惯了..
这就是所谓的向前兼容..所以越走包袱会越重
如果碰巧结果为空,那么这种语法形式就显得非常有用。
此时可以创建一个长度为0的数组:new elementType[0].
int[] a=new int[10];
a[0]的地址就是a+0;
a[1]的地址就是a+1;
a[2]的地址就是a+2;计算机的cpu处理数据时,都要从内存打交道,数据要从内存中取,结果要放到内存中,而存取数据要知道内存地址才行,所以寻址快,则存取速度也就快,程序的效率也就高。