为什么数组下标从0开始而不是从1开始

2020-11-20 05:40:50 字数 2944 阅读 1934

1楼:匿名用户

数组是一段连续的空间,要求a[i]就是求它

的地址,然后找到它。如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。

是不是前一种更好计算呢。

数组下标都是从1开始的,为什么说成是从0开始的呢?

2楼:仁昌居士

数组下标说成是从0开始的是因为如果从1开始编号,每次随机访问数组元素都多了一次减法运算,对于cpu来说,就是多了一次减法指令。数组作为非常基础的数据结构,通过下标访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能的做到极致。从0开始,可以减少一次减法操作。

3楼:匿名用户

下标是指数组元素的索引号,vb默认是0,对于你的数组dim a as variant

a=array(1,2,3,4)

a(0) 指第一个元素,它的索引号是0,它的值是1

4楼:匿名用户

option base 指定下标。一般是0或者是1.

数组下标为什么从0开始而不是从1开始?

5楼:爱上榛子的核桃

你可以把数组变量看成指针,数组下标看成地址的偏移量。

因为数组第一个元素的地址偏移量一定是0,所以数组下标就是从0开始了

6楼:匿名用户

老大,这个问题也要问。非要懂得数据结构的人才能回答吗?

想想就很明白了。

以下假设数组下标是从1开始的:

如果你定义

int a[100];

那么你在使用的时候用到第100个元素a[100]的时候,请问编译器如何能分辨你这里的a[100]和你定义的a[100]有什么区别呢?

假设到此为止。

现在如果你下标是从0开始的,那么a[0] - a[99]是元素,怎么都不可能和定义的a[100]出现名字冲突,编译器就很容易识别了。

就这么简单的问题~~~

7楼:匿名用户

也可以从1开始啊,可能与0是最小自然数有关吧…

8楼:匿名用户

钻语法的牛角尖没啥意思、

语法是规定好的

就像球只能进别人的门,进自已的裁判就要吹了

9楼:小云

为什么“1+1”答案是2,不是3?规定的呗,同样的道理,数组下标也规定从0开始。

为什么c语言的数组下标从0开始而不是从1开始

10楼:匿名用户

一种约定。

如果最初约定从1开始 那也没什么

至于为什么会选择从0开始,最重要的原因 我觉得是方便对于任意的a[i] 取值的时候 都是等效于*(a+i)a是数组首地址,这样访问第一个元素 *(a+0) 就不需要任何偏移了。

c/c++中数组下标从0开始而非从1开始,为什么?

11楼:匿名用户

随着你遇到的问题种类越来越多,你就会发现下标从0开始能给程序在细节上带来的优化效果了。

比如,最基本的,确定数组a中第i个元素的地址,如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度,多了一个整数计算

12楼:紫金玄铁

方便访问数组成员。

从0开始的话,只需用数组名(也就是数组地址),加上下标,只需要很简单的计算,就可以内存中准确访问到元素。

像在pascal这样的语言中,数组下标是可由人去定的。如:

vararr: array[2..4] of integer; //数组下标从2开始,到4结束。

虽然pascal这样的数定,在逻辑上很方便人们去理解。但从编绎器角度来讲,就很麻烦了。这时,你要访问一个数组元素,就不得不知道数组的下界,还要经过转换才能得到元素的相对指针。

如果是在多维数组的应用中,就更显而易见了。

c语言在工程应用中应用广泛,就是因为他对硬件的支持效率高,

在早期硬件不是很高级的时候,将数组下标选为0,大大提高访问数组速度,而且还省去了不必要的寄存器占用。

在c程序的数组中为什么下标要从0开始呢?从1开始不行吗?

13楼:匿名用户

可以,但是浪费了内存

,比如开辟100个存储,int array[100]:是从0~99,而你是从一开始,必须是int array[101]了,之所以下标从0是因为pc的内存他的硬件实实在在就是从0地址开始索引的……

14楼:

数组的地址与第一个元素的地址相同,下标为多少也就是指偏移量为多少的地址,所有0开始比较方便。

还有一些历史原因吧,有些时候设计者就是按照他的思想设计的,就是他认为的,也没那么多原因。

15楼:匿名用户

c语言是老外发明的,老外都是从0开始,跟中国人习惯不同

16楼:匿名用户

程序最终都会编译成机器码,如果你了解汇编的话应该知道,数组占用着一串连在一起的内存,数组名可以理解为那一块内存的首地址,下标则是偏移,寻址过程就是首地址+偏移*步长,第一个元素偏移为零,刚好等于下标,如果下标从1开始处理起来麻烦一点。

17楼:匿名用户

在c程序的数组中为什么下标要从0开始呢?从1开始不行吗?

可以。但是从0开始更节约内存。

为什么数组下标从0开始?

18楼:百度用户

这其实是一个错误。下标从1开始可以免去很多bug

至于内存地址的偏移应该是编译/解释系统的工作,不应该暴露给客户端**

有n个整数,把它们存放到一维数组中(下标从0开始),输出

1楼 include int main n i maxm maxn 题目中n最大20 这里比题目中稍微大一点 while scanf d n eof n 0 printf d d a maxn maxn return 0 用c语言编程 从键盘上输入10个整数存放到一维数组中 输出其中最大的数及其对应...

c语言中,数组元素的下标是从什么开始的

1楼 匿名用户 从0开始 比如a 100 就是0 99的下标 2楼 大狂哥灬 比如说a 4 是从下标0开始到3结束 a n 就是从0开始到n 1结束 c语言数组的下标总是从0开始吗 3楼 水水好萌 是的,对数组a max max是一个编译时可知的值 来说,它的第一个和最后一个元素分别是a o 和al...

为什么中国是一夫一妻制,中国真正实行一夫一妻制是从什么时候开始的?

1楼 北京王嘉化妆学校 自然演变 人类从巢居到黄帝造宫室以后的屋居,逐步形成了家,在古代,由亲亲和尊尊及和此类似的关系组成的大的家族就是国的雏形,而近代社会的家却是国的一个基本生活单位,家庭的功能和作用和古代的有了很大的区别,而这一切都是很神奇地自然形成的,有了家以后才有了夫妇,有了夫妇以后才有了婚...