sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意

背景

早在linux操作系统诞生开始,c语言作为linux系统的编程语言主力,它为后续的其他高级编程语言(如c++、java)提供了很多语言级的语义和协议规范。

dcf7528a8ada90ee23eb86a2df7fd914.png

数组做为linux操作系统最基本的数据结构之一,便是其中的一项语言级高级特性,深入理解数组有助于大家更深入的了解计算机系统原理。

寻址:从0开始

首先,我们了解下数组的基本特性

1、线性表结构

2、一组连续的内存空间

3、存储相同类型数据

由数组的基本特性可知:数组所申请的内存是一段连续的内存地址,其存储的是相同类型的值。

f837dd7ac5b0158dbf768a90e1161eb8.png

从其数组内存模型定义来看,数组的访问是从首地址(偏移量为0)开始,如果想访问下一个数组元素,需要把位置偏移,也就是数组内存寻址时,需要把偏移量变为1,以此类推。

计算数组内存寻址公式:

array[i] = base_address + i * data_type_size

参数说明

  1. base_address 首地址array[0] ,数组第一个元素内存地址
  2. i 为偏移量
  3. data_type_size 数据类型字节大小

举个例子:

1、定义一个int 数据类型的数组,a为变量,数组长度为5

int[] a=new int[5]

2、假设数组地址:

  1. 第一个内存地址为:1008
  2. 第二个为:1009
  3. 第三个为:1010
  4. ...
18142fd81239755e10ab3740cecb36a2.png

3、寻址:由公式:array[i] = base_address + i * data_type_size

f1d8dad054a5745a12285cf3805892c3.png

a[0]——把a拿到的内存地址:

1008 + 0 = 1008 (指向第一个内存地址)

a[1]——把a拿到的内存地址:

1008 + 1 = 1009 (指向第二个内存地址)

a[2]——把a拿到的内存地址:

1008 + 2 = 1010 (指向第三个内存地址)

以此类推。。。

关心话题(一):数组下标为什么不从1开始

cpu消耗

如果数组从1开始编号,公式为a[i] = base_address + (i -1) * data_type_size,对cpu而言,”i -1“就多了一次减法指令。

02ce521b26ebab4063a14e1270ab6c72.png

历史原因

c语言的设计者使用了0开始编号,后续的很多高级编程语言也就沿用了这个规范,降低额外的学习和理解成本。

关心话题(二):随机访问

由于数组是线性结构,那么根据首地址和偏移量就可以计算出任意数组元素的内存地址

array[i] = base_address + i * data_type_size

java面试题:数组和链表的区别

1、链表适合插入和删除,时间复杂度是O(1)

2、数组适合查找,查找的时间复杂度为O(1)

b188f68ba13111b9d2f9a32f9826f084.png

究其原因是数组支持随机访问,根据下标随机访问的时间复杂度是O(1),而链表需要从头开始寻址,直到找到对应的元素地址才结束,其复杂度为O(logn)

关心话题(三):集合能替代数组吗?

6f6b4159037f757e1731fea5d937c68a.png

数组和集合最大一个区别于在于数组能直接存储基本的数据类型(如int、float、long等);而集合只能通过装箱和拆箱存储基本数据类型,代价是需要消耗性能。另外使用多维数组时,用数组会直观一些。

jvm标记清除算法

613980e2da31b4b47807574b7eebf95c.png

为了避免数组大规模的数据搬移,可以将k位置的数据直接搬移到数组末尾位置,再把新数据放到k位置。删除时,可以将要删除的数据标记下来,当数组没有足够的空间时,将标记的数据统一删除,就可以提高很大的性能,也就是jvm标记清除垃圾回收的思想 。

总结

大部分高级程序语言的数组下标是从0开始的,而python数组下标却可以支持负数 。

最后

如果觉得本文对您有帮助的话,记得关注、转发哦,我会为大家持续提供原创干货。需要资料,请关注、转发,私信“资料”面试+微服务+springboot资料免费赠送。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 5.0新增功能摘要

.NET5.0发布了大半个月,从.NET Core3.1的平滑迁移体验令人心旷神怡,改个targetframework就完成迁移,不要太轻松!然而,ASP.NET Core5.0也有很多有意思的改变,这里为大家摘录一下!内置swagger在 A…

算法设计与分析——回溯法——圆排列问题

#include<iostream> #include<math.h> using namespace std; class Circle {public:float Center(int t);void Compute(void );void BackTrack(int t);float min; //当前最优值 float *x; //当前圆排列圆心横坐标 float *r; //当前圆排列 float *result; /…

数字图像处理王伟强_深度学习主导下,还有必要学数字图像处理?

图像处理技术作为计算机视觉的基础&#xff0c;通过计算机对图像进行去除噪声增强、复原、分割、提取特征等处理的方法和技术。多用于目标检测与目标识别等领域。>>数字图像处理、CV、CG与AI四者的关系图<<随着计算机视觉的迅速发展&#xff0c;基于深度学习的研究…

算法设计与分析——贪心算法——单个出水口打水问题

1.打水问题&#xff1a;有n个人去水房排队打水&#xff0c;只有一个出水口&#xff0c;且出水口流速恒定。每个人因为盛水的工具不一&#xff0c;打水所需的时间也不一致&#xff0c;设第i个人所需要的打水时间为ti&#xff1b;问如何安排打水顺序使得所有人的平均等待时间最短…

在传统行业做数字化转型之最终篇

【数字化转型】| 作者 / Edison Zhou这是EdisonTalk的第310篇原创内容在过去的两年时间里&#xff0c;我加入了一家传统行业的企业参与其数字化转型的过程&#xff0c;现在我将我的经历分享出来&#xff0c;本文是最终篇&#xff0c;主要会回答中途一些网友的问题以及推荐一些参…

算法设计与分析——贪心算法——汽车加油问题

汽车加油问题&#xff1a;一辆汽车加满油后可行驶n公里&#xff0c;旅途中有若干个加油站&#xff0c;两加油站间距离不超n 公里&#xff0c;起点离第一个加油站距离及最后一个加油站离终点距离也不超过n公里。算法给出应在哪些加油站停靠加油&#xff0c;使沿途加油次数最少。…

.NET Conf China 2020志愿者招募火热开启!还有神秘惊喜等你来领…

距.NET Conf China 2020 2020 中国 .NET 开发者大会开幕还有14天作为.NET的组织者之一我们已经为这个活动准备铺垫了很久但为了保证活动方方面面的质量为了给现场&线下的小伙伴们带来更好的体验现在&#xff01;我们十分需要你们的帮助&#xff01;为更好地做好大会服务工作…

golang 修改nginx配置文件_「系统架构」Nginx调优,不可错过的几点

通常&#xff0c;Nginx在安装完后&#xff0c;不用更改任何配置信息&#xff0c;我们就可以直接运行它。但是&#xff0c;这显然不能满足我们的生产要求。在生产中&#xff0c;要让Nginx能正常高效地运行我们的应用&#xff0c;我们通常需要对Nginx的配置文件进行一些参数上的设…

如何在 C# 中使用 Attribute

译文链接&#xff1a;https://www.infoworld.com/article/3006630/how-to-work-with-attributes-in-c.html?nsdrtrueAttribute 在 C# 中是一个非常强大的特性&#xff0c;它能够给你的程序集添加元数据信息。Attribute 实际上是一个对象&#xff0c;它可以与以下元素中的任何一…

readyread信号不触发_触发器型PFD与传统型PFD性能仿真对比

&#xfeff;TOC 鉴频鉴相器中为了保证鉴相范围&#xff0c;主要有两种PFD可以在理想情况下实现 到 的鉴相范围。 传统的PFD和边沿触发型的PFD1.电路结构1.1传统型电路结构参考文献&#xff1a;宽带CMOS分数频率合成器的研究与实现——黄福青 东南大学博士论文 1.2 触发器型电路…

算法设计与分析——分治与递归——整数划分问题

将正整数n表示为一系列正整数之和&#xff0c; nn1n2n3n4......nk &#xff08;其中&#xff0c;n1>n2>n3>n4........>nk>0,k>1&#xff09;正整数n的这种表示成为正整数n的划分。正整数n的不同划分个数成为正整数n的划分数&#xff0c;记作p&#xff08;n…

跟我一起学Redis之Redis持久化必知必会

前言Redis是出了名的速度快&#xff0c;那是因为在内存中进行数据存储和操作&#xff1b;如果仅仅是在内存中进行数据存储&#xff0c;那就会导致以下问题&#xff1a;•数据随进程退出而消失&#xff1a;当服务器断电或Redis Server进程退出时&#xff0c;内存肯定随之释放&am…

算法设计与分析——分支限界法——装载问题

有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船&#xff0c;其中集装箱i的重量为Wi&#xff0c;且装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有&#xff0c;找出一种装载方案。 容易证明&#xff1a;如果一个给定装载问题有解&#xff…

BootstrapBlazor 之王者组件 Table

强大的表格组件Gitee 开源地址为&#xff1a;https://gitee.com/LongbowEnterprise/BootstrapBlazorGithub 开源地址为&#xff1a;https://github.com/ArgoZhang/BootstrapBlazor在线演示网站&#xff1a;https://www.blazor.zone1、前言 Table&#xff08;表格&#xff09;组…

数据结构——最大堆最小堆

定义&#xff1a; 最大堆和最小堆都是一棵完全二叉树。 最大堆&#xff1a;是指根节点的关键字值是堆中的最大关键字值&#xff0c;且每个节点若有儿子节点&#xff0c;其关键字值都不小于其儿子节点的关键字值。 最小堆&#xff1a;是指根节点的关键字值是堆中的最小关键字值…

EntityFramework Core 健康检查

【导读】.NET Core提供对应方法可进行健康检查&#xff0c;那么在EF Core中是否也提供了相应的方式呢&#xff1f;EF Core 2.2&#xff08;包含2.2&#xff09;版本提供了针对上下文的健康检查&#xff0c;接下来我们直接利用.NET 5.0版本进行演示EntityFramework Core 5.0健康…

算法设计与分析——分支限界法——布线问题

印刷电路板将布线区域划分成nm个方格如图a所示。精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时&#xff0c;电路只能沿直线或直角布线&#xff0c;如图b所示。为了避免线路相交&#xff0c;已布了线的方格做了封锁标记&#xff0c;其它线路…

我是如何把 Java 项目移植到 .NET 5.0 的

伴随着 IP 位置库 的上线&#xff0c;笔者的“童年梦想”又成真了一个。为了分发这份来之不易的数据库&#xff0c;笔者找到了 ip2region 项目。该项目提供了一种体积小且查询速度极快的离线IP位置数据库文件格式&#xff0c;同时提供了多种语言支持的查询客户端。但 ip2region…

qt制作一个画板_如何直接用Sketch制作动画|Sketch插件|

本期的sketch插件来为大家讲解如何制作动画&#xff0c;看来看看马克笔设计留学的MUzi老师的教程吧&#xff01;安装1.下载并解压 Anima Tookit.ziphttps://timeline.animaapp.com/2.双击 Anima Tookit.sketchplugin 完成安装使用1.执行 Plugins > Anima Tookit > Show/H…

算法设计与分析——动态规划——最大字段和问题

动态规划解决问题是自底向上。原问题的规模是n个元 素。这n个元素不好考虑&#xff0c;我们先考虑n-1个元素&#xff0c;这样还不好考 虑&#xff0c;我们考虑n-2个元素&#xff0c;这样依次递减&#xff0c;最后问题规模变成一个 元素。但是我们发现&#xff0c;在递减的过程中…