为什么数组是从零开始?好处是。。。
2009-04-19 23:33
337 查看
今天遇到了个问题。为什么数组是从零开始?搞了那么久的编程都没有注意过这个问题。惭愧啊。。。我们来看一下,各网友的解释吧。。
最佳答案
随着你遇到的问题种类越来越多,你就会发现下标从0开始能给程序在细节上带来的优化效果了。
比如,最基本的,确定数组a中第i个元素的地址,如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度,多了一个整数计算
方便访问数组成员。
从0开始的话,只需用数组名(也就是数组地址),加上下标,只需要很简单的计算,就可以内存中准确访问到元素。
--------------------------------------------------------
像在pascal这样的语言中,数组下标是可由人去定的。如:
var
Arr: Array[2..4] of Integer; //数组下标从2开始,到4结束。
虽然pascal这样的数定,在逻辑上很方便人们去理解。但从编绎器角度来讲,就很麻烦了。这时,你要访问一个数组元素,就不得不知道数组的下界,还要经过转换才能得到元素的相对指针。
---------------------------------------------------------
如果是在多维数组的应用中,就更显而易见了。
---------------------------------------------------------
C语言在工程应用中应用广泛,就是因为他对硬件的支持效率高,
在早期硬件不是很高级的时候,将数组下标选为0,大大提高访问数组速度,而且还省去了不必要的寄存器占用。
===============================
这个是ansi c规定的
好处在于数组的元素就与指针的元素一样
===============================
数组名存储的是首地址
===============================
计算机的基本存储结构是从2的0次方开始的。故用0开始是最优化的!
最佳答案
随着你遇到的问题种类越来越多,你就会发现下标从0开始能给程序在细节上带来的优化效果了。
比如,最基本的,确定数组a中第i个元素的地址,如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度,多了一个整数计算
方便访问数组成员。
从0开始的话,只需用数组名(也就是数组地址),加上下标,只需要很简单的计算,就可以内存中准确访问到元素。
--------------------------------------------------------
像在pascal这样的语言中,数组下标是可由人去定的。如:
var
Arr: Array[2..4] of Integer; //数组下标从2开始,到4结束。
虽然pascal这样的数定,在逻辑上很方便人们去理解。但从编绎器角度来讲,就很麻烦了。这时,你要访问一个数组元素,就不得不知道数组的下界,还要经过转换才能得到元素的相对指针。
---------------------------------------------------------
如果是在多维数组的应用中,就更显而易见了。
---------------------------------------------------------
C语言在工程应用中应用广泛,就是因为他对硬件的支持效率高,
在早期硬件不是很高级的时候,将数组下标选为0,大大提高访问数组速度,而且还省去了不必要的寄存器占用。
===============================
这个是ansi c规定的
好处在于数组的元素就与指针的元素一样
===============================
数组名存储的是首地址
===============================
计算机的基本存储结构是从2的0次方开始的。故用0开始是最优化的!
相关文章推荐
- 为什么有些编程语言的数组要从零开始算
- 为什么数组标号是从0开始的?
- 为什么排序后的数组比没有排序过的数组运行快?
- 为什么存储密码字符数组比字符串更合适?
- C专家编程之为什么C语言把数组形参当做指针:数组/指针实参
- 使用动态数组结构的一个好处
- 什么是多态?为什么用多态?有什么好处?
- 为什么C语言不检查数组的下标?
- Java 集合就是比数组好(为什么有了数组还需要集合?)
- 为什么用const说明的常量不能用来定义一个数组的初始大小?
- java的ArrayList中,数组为什么被transient修饰,这是因为什么原因而设计出来的?
- 为什么处理已排序数组比处理未排序数组更快?
- 为什么我不喜欢开源,开源到底对公司,对个人有好处吗
- spring框架的好处,为什么使用它?
- spring框架的好处,为什么使用它?
- 委托的使用全面剖析(委托好处,为什么要用委托,委托实例精解)
- 为什么都选择租服务器,服务器租用有什么好处
- ACM--再说利用数组存储计算过程对程序效率带来的好处
- java中为什么要给类使用代理?它有哪些好处?
- [转]什么时候该用委托,为什么要用委托,委托有什么好处