不起眼的网上面试题——数组下标为什么是从零开始(一)

不会写博客,写点东西练练手,如有不足,还请指教。

由于毕业->找工作->面试的需要,总有一些面试中的题目看啥不起眼,实则有内涵。好比数学学习中那些公式,都会用,但怎么来的大多数人却不知。

今天要说的是:数组下标为啥从零开始。

数组在这就不多说了,直接步入主题。

简而言之:降低CPU负担,提高CPU效率

原因呢?用下面这个例子来说明一下。

数组是一种线性表数据结构,它用一组连续的内存空间,储存一组具有相同类型的数据。
假设我们定义了int a[5];那要找a[2]该怎么办?

  1. 首先,要找这一连续内存空间的首地址,就是a(也就是常说的数组名,代表首地址);
    2.然后 对首地址进行偏移(下标就是首地址偏移)

上述步骤对于CPU而言就是进行运算。

找到了首地址然后加上偏移(下标),于是
a[2].address = a + 2*data_type_size,这是以下标初始为0的情况下,此时a[2]代表是数组中的第三个。

如果下标初始为1的情况下,此时的a[2]代表是数组中的第二个,由于数组初始下标为1,a[2]相对于首地址只偏移了一个单位,此时要找到a[2],cpu要算*a[2].address = a + (2-1)data_type_size

很明显,同样找a[2],相比之下,如果数组初始下标为1,则需要多运算一次(2-1)。其实,在数组初始下标为0的情况下,也有个(2-0),不过由于正是这个“0”,才让这个运算可以省去。同理如果下标初始为其他数,则要减去该数。“0”就是这样无与伦比,哈哈哈。

如有不足,请多指教,每周一更,谢谢大家支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值