
语言零基础入门—数组-02
本节课的任务是:
- 讲解数组的内存原理。
- 讲解二维数组的定义,使用,原理。
01 - 数组的内存原理
上一节我们讲解了一维数组的定义以及使用,但是数组的具体内部原理是怎么实现的呢?
- 首先:我们说过数组定义的时候必须指定这个数组的长度,这是为什么呢?
- 答:因为数组在定义的时候,会根据数组的长度(即数组元素个数),去内存中申请一块地址连续的空间,进行存储数组。
- 大致就是这个样子:假设内存如图所示,前一部分被占用了,然后程序运行到数组定义的部分,就会根据数组的长度在内存中申请一块地址连续的空间。

- 紧接着:数组申请的连续地址空间的长度是多少呢?
- 答:数组分配的空间的大小是根据这个公式进行分配的:空间大小 = 数组元素的数据类型长度 * 数组的元素个数。
- 具体解释如下:

- 最后:数组的索引是怎么实现的呢?
- 答:数组的索引我们说过是根据 数组名+中括号内部的序号 进行索引的,比如:我们有一个数组 A,我们如果想要得到数组A内部的第3个元素内容的时候可以使用:
A[2]
就可以得到了(切记:数组下标从0开始,因此第三个元素的下标为2)。 - 具体的索引原理:(由于这一部分涉及到较难的指针的内容,所以大家了解一下即可)。
- 答:数组的索引我们说过是根据 数组名+中括号内部的序号 进行索引的,比如:我们有一个数组 A,我们如果想要得到数组A内部的第3个元素内容的时候可以使用:

02 - 二维数组的基础引入
上边我们讲解了一维数组,我们知道了一维数组就是在地址中申请一个连续的地址空间进行分配数组中的每一个元素。
然后这节课我们讲解下二维数组,与一维数组类比之下我们可以知道,一维数组是连续的一维空间,二维数组是连续的二维空间,具体见下图:

02.1 - 二维数组的定义
- 与一维数组一样,我们定义二维数组的时候也定义以下的内容:数组的名字,数组的横坐标与纵坐标的维度。比如:
int A[3][5]
的意思就是定义了一个3行,5列的二位数组。他的图示是这个样子的:(箭头的指向是我用来标识 对应位置的坐标的。二维数组的行列都是从0开始。)

- 二维数组的定义方法:
int A[3][4]
:定义了一个3行4列的整形数组,并没有初始化初始值。int A[2][3] = { {1,2,3} , {4,5,6} }
:定义了一个2行3列的数组,此时的一个大括号用来包含一行的数据。具体的数据在内存中的表示是这个样子。(它可以用A[0][2]
来索引到数据3,用A[1][1]
来索引到数据5。)(这个索引方式是线性代数中的矩阵的索引,线性代数如果不会的话可以自行补一下数学的知识。)

03 - 二维数组的使用
与一维数组一样,我们举一个二维数组的使用例子,来深入理解一下二维数组。
- 题目:请定义一个3行4列的二维数组,并且在dos窗口中输入,最后打印输出。
- 程序:
#include <stdio.h>
void main()
{
int a[3][4];
for(int i=0 ; i<3 ; i++){
for(int j=0 ; j<4 ; j++){
printf("请输入a[%d][%d]位置上的数据:n",i,j);
scanf("%d",&a[i][j]);
}
}
printf("你输入的二维数组打印如下:n");
for(int k=0 ; k<3 ; k++){
for(int m=0 ; m<4 ; m++){
printf(" %d ",a[k][m]);
}
printf("n");
}
}
- 运行结果:

- 程序解析:

04 - 结束了。
好了,这一节就讲到这里了。
这里大家先回顾一下一维数组的存储,以及了解一下二维数组的使用。
下一节讲解二维数组的深层次的理解。
关个注呗!!!
http://weixin.qq.com/r/_y9cRE3EbRASrQkn93rp (二维码自动识别)