专栏首页嵌入式开发圈C语言的数组为什么要从0开始编号

C语言的数组为什么要从0开始编号

在学习数据结构与算法之美中看到一个知识点挺有趣,虽然不是作者压倒性的实验证明,但分析起来也是有道理的,我们来看看是怎么回事:

假设又有a[i]和b[i]两个int类型的数组,如果按计算偏移地址来获取数据,a表示数组的首地址,如果数组从0开始计数,则a[0]就是偏移为0的位置,a[i]表示偏移i个数据类型大小的位置。则a[i]满足以下计算公式:

1a[i] = 基地址 + i * 数据类型

如果数组从1开始计数,则满足以下公式:

1b[i] = 基地址+(i-1)*数据类型

很显然,从1开始计数编号,每次随机访问数组元素都多了一次减法运算,对于CPU来说,即是多了一条SUB指令,显然从0开始计算要高效一些。

本文分享自微信公众号 - 嵌入式开发圈(gh_d6ff851b4069),作者:杨源鑫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 全志A64 设备树里的gpio应用开发

    获取到int类型的gpio口后,就可以使用linux/gpio.h里的gpio口操作函数:

    morixinguan
  • 会C/C++就可以开发Linux/Android应用程序?替代传统串口屏的Yoxios了解一下!

    串口屏相信各位开发者都不陌生了,它解决了大多数开发者在嵌入式UI应用方向的痛点,常见的痛点主要有以下几个方面:

    morixinguan
  • Linux多路复用Select()与poll()函数

    在Linux编程中,一切皆文件,往往是对一个文件进行操作,比如说串口,和传感器打交道,一般情况下就是一来一去,一收一发,但是,如果我有多个传感器,而传感...

    morixinguan
  • 从机器学习学python(四) ——numpy矩阵基础

    从机器学习学python(四)——numpy矩阵基础 (原创内容,转载请注明来源,谢谢) 一、numpy中matrix 和 array的区别 ...

    用户1327360
  • 笔记之一

    用户1733462
  • Maxout Networks

    我们考虑的问题是如何设计模型来利用最近引入的近似模型平均技术(dropout)。我们定义了一个简单的新模型maxout(之所以这样命名,是因为它的输出是一组输入...

    于小勇
  • DeepMind和谷歌用人工智能重现了前NFL后卫蒂姆•肖的声音

    今年8月,谷歌人工智能研究人员与ALS治疗发展研究所合作,分享了一个针对有说话障碍的人的语音到文本转录服务Euphonia项目的细节。他们表明,使用母语和非母语...

    AiTechYun
  • Python|认识可迭代对象与迭代器

    可迭代对象指的是定义了_ _ iter _ _ 方法的对象,调用该方法会返回一个迭代器对象。可迭代对象,例如:list列表、tuple元组、带有上述iter方法...

    算法与编程之美
  • 精益敏捷开发: 带病迭代

    前言:    本文主要探讨在精益敏捷的开发下, 该如何看待与处理所谓的 “带病迭代”? (而不在探讨如何定义带病迭代◦) 本文:    精益敏捷开发采用迭代的方...

    Ken Fang 方俊贤
  • 第五届蓝桥杯决赛B组C/C++——殖民地

    mathor

扫码关注云+社区

领取腾讯云代金券