数组地址的小知识(地址存储)!!!

一,数组的基本知识

1,数组是由基本数据类型按照一定规则组成的,称其为构造数据类型。

2,构造数据类型包括数组,结构体,共用体等,使用构造数据类型可以求解更为复杂的问题。

3,数组是最基本的构造类型,是相同类型数据的有序集合。

4,数组中的元素在内存中连续存放,用数组名和下标可以唯一地确定数组元素。

兄弟们,废话不多说,我们直接进入正题

二,一维数组的地址存储方式

如下图所示:

我们先用int类型创建并初始化i,a[10],将数组a[10]分配到内存中

(分配到内存地址中去,一般是随机分配的)

然后用while循环开始输出数组a的内存中所表示的地址名

(&为取地址运算符,您在使用scanf函数中应该经常使用。)

大家看!这一行行,有没有发现规律呢?

我们能看到最后两列他们相隔4个差值(这些数为16进制),为什么只会相差4个呢

注意:大家看一下前面我标的int类型(int类型所占字节为4个字节)

这说明在数组a中里面每个元素都占4个字节,而数组a的下标为10,则10*4=40个字节。

从而得出我们创建的数组a在内存中开辟了10个空间并且每个空间所占4个字节

接下来我们瞅瞅下面这副图,以便更好的观察与理解。

有些小伙伴可能不知道,我们创建的数组在内存中是以线性方式存储的。

不仅一维数组这样,二维数组,多维数组也是如此……

三,二维数组的地址存储方式

如下图所示:

我们先用int类型创建并初始化i,j.

先用char类型创建并初始化a[8][90],将数组a[8][90]分配到内存中。后用for循环开始输出数组a的内存中所表示的地址名

大家请看方向箭头:在上面一节我们说过不仅一维数组为线性方式存储在内存中,就算是二维数组,多维数组也是如此!

能看出来在数组a[0][9]与a[1][0]的两个地址差和在同一列a[0][1]与a[0][2]差值为一样的。

我们一开始理解的二维数组是这样的:

有行有列,有些小伙伴就会想会不会这就跟我们数学一样,一维为线,二维为面,三维为立体的同样存储方式。

小知识:我们把a[0][1]中的[0]称为行,把[1]称为列。

我们来用一幅图来解释输出地址的那副图,来更清晰的理解:

a[0]表示包括a[0][1]到a[0][9]在内的大集合里面都是小的子集,

而在第0行末和在第1行初的地址他们却是连续的,这说明他们在内存中是连续的。
我们初始化数组的时候是这样的a[i][j]={   {1,2,3,4},   {5,6,7,8},   {9,10,11,12}  }。

与图中类似,但图中表示为在一条线中挑出一段一段为数组中的行。

而每一段当中的每一小段就可以理解为放置单个数的行中的列(例如:a[0]中的a[0][1])

以上总结

数组是由基本数据类型按照一定规则组成的构造数据类型。它是最基本的构造类型,是相同类型数据的有序集合。数组中的元素在内存中连续存放,用数组名和下标可以唯一地确定数组元素。

一维数组的地址存储方式是线性存储,每个元素占用固定大小的字节。二维数组的地址存储方式也是线性的,行与行之间的地址差值与列与列之间的地址差值是一样的。

还有一点,大家可以学习一下:使用图形的话,可以更好地观察和理解 数组在内存中的存储方式。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值