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

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

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

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

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

简而言之:降低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”就是这样无与伦比,哈哈哈。

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

发布了6 篇原创文章 · 获赞 2 · 访问量 96

猜你喜欢

转载自blog.csdn.net/weixin_44253375/article/details/105029064
今日推荐