数组的由来和为什么数组下标从0开始?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40670946/article/details/83061993

1.数组的由来:

// 变量声明
int a = 1;
int b = 2;
int c = 3;
int d = 4;
...
int n = 20;

// 一个int类型4个字节,一个字节占8位

a.字面引申:

看到上面的这些int数据,都是int类型,有人就想,既然都是一种类型,为什么不能把他们放在一起?用一个变量接收就行了,每一次还要取一个名字,特别麻烦!!

b.通俗解释:

假设你是导游,站在你面前的是20个人,10个男的,10个女的;
a:有一男想上洗手间,你会说去吧,左走有一个叫光天化日的洗手间!
在这里插入图片描述
b:有一女想上洗手间,你会说去吧,右走有一个叫月黑风高的洗手间!
在这里插入图片描述
c:大家都要上洗手间,你要是每个人都给指定一个洗手间,显然,20个洗手间,出现在你的面前,恐怕可以申请吉尼斯世界纪录了!!!

既然不可能都给每个人指定一个洗手间,读者和导游都知道怎么做了吧?
导游:男往洗手间左走,女往洗手间右走

假设:int
a,b,c,d…x 对应的是洗手间的名称
1,2,3,4…20 对应在座的20个人

现在不分洗手间了,只分男女!按类型来分类
有数组的话:现在可能只需要一个洗手间或者两个洗手间

int [] a = {1,2,3,4,5,6,7,8,9,10}   // 男洗手间
int [] b = {11,12,13,14,15,16,17,18,19,20}   // 女洗手间

数组的特点:

1.同类型元素
2.固定大小(洗手间的位置有限)

位置有限,那么array当然得顺应民意出来咯,毕竟数组的复制没那么容易,解决问题也是不怎么方便!!

2.数组下标为什么从0开始:

int[] a = new int[5];

a.初步理解:

a.上面的int数组申请5片连续的空间地址,就像盗墓的机关门一样,连续的!
b.盗墓的机关门,先看见第一个门,然后才能见到另一扇门,数组的空间和机关门类似,如图:
在这里插入图片描述

c.第一扇门,为了记住门,不迷路,于是你给门上弄了一个1001的门牌号:1001门开了
d.你进入1001这扇门之后,1001自己关上了,于是你看到另外一扇门,为了记住自己走过多少门,于是你讲这扇门记为:
1002 = 1001 + 1,
类推:
1003 = 1001 + 2,
1004 = 1001 + 3,
1005 = 1001 + 4,
那么:第一道门不就是
1001 = 1001 + 0,
好家伙,闯机关门的你发现了规律,下次只要遇到机关门,那么
int[0] 不就是第一道门1001吗?都不用再花心思去写什么1001,1002…了
同样的:其他类型的数组
在这里插入图片描述
假如:1,2,3,4,5,6各位不同类的机关(每条线代表),每个机关都有机关门的话,你是不是还要分别取名字?
假设例如:
1号:int类型机关,取1001,1002各代表第一扇门、第二扇门
2号:string类型机关,取2001,2002,2003各代表第一扇门、第二扇门、第三扇门
多么麻烦,取名字麻烦,索性按照发现的规律,int[0],string[0],节约了取名字的时间和空间!!

扫描二维码关注公众号,回复: 4261946 查看本文章

b.加深理解:

int[0] = 100;
int[2] = 200;

//int 占4个字节

既然在数组的创建时,数组小标为0的好处体现了,那么存值,取值的时候呢?:
在这里插入图片描述
计算存储值的时候:
a.找到第一个字节格子,包含第一个格子然后向下,再找3个格子,就是四个格子,存放数值:100
int[0] = 100; 等价于: 2001 = 2001 + 0 * 4
int[2] = 200; 等价于: 2009 = 2001 + 2 * 4
存值也是一样的道理!!
取值:字节格子也是一样
int[0]的位置不就是就是2001吗?
你也告诉计算机你的位置是0了,int类型,那么:
int[0]: <<==>> int[0] = int[0] + 0 * 4 = 200

怎么看,不还是不用给房间命名了?还有一点呢,int[0] 中[0],中括号中的0 也正好是0 * 4中的0啊!!

希望读者能有收获,理解不对的地方多多指教!留言区欢迎您!

猜你喜欢

转载自blog.csdn.net/qq_40670946/article/details/83061993