40篇学完C语言——(第三篇)【二维数组】

二维数组

之后介绍了一维数组,接下来是若何定义它,若何利用二维数组。

定义二维数组的常用办法如下:

规范阐明符 数组名[常量剖明式1][常量剖明式2]

与一维数组定义的独一区别是有一个常数表达式2,此中常数表达式1是第一维的长度,常数表达式2是第二维的长度。每当处置一个二维数组时,为了便于理解,将数组视为一个矩阵,常数表达式1提醒了暗示矩阵中的行数,常数表达式2提醒了暗示矩阵中的列数。和一维数组一样,定义二维数组时,常量的表达式不克不及酿成变量。我们通过上面一个代码来看看二维数组的定义。

#include<stdio.h>#define M 4#define N 3int main() { int arr[M][N]; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { printf("&arr[%d][%d]=%d\t", i, j, &arr[i][j]); } printf("\n"); } return 0;}

运转后果:[var]将二维数组arr视为一个矩阵,下图表示了数组中每一个元素正在矩阵中的存放地位。image.png数组中各个元素正在矩阵中关于应的地位由二维数组的两个下标决议。咱们可以将定义的二维数组int arr[4][3]视为由arr[4]以及int [3] 两部分构成,将arr[4]视为一个整型一维数组,其中含有4个元素arr[0]、arr[1]、arr[2]、arr[3],每一个元素都是int[3]规范的,也即是说,每一个元素又是一个一维数组,每一个一维数组含有3个元素,如arr[0]含有arr[0][1]、arr[0][1]、arr[0][2]三个元素。运算成果:数组中每个元素的对应位置由二维数组的两个下标决定。我们能够把定义的二维数组int arr[4][3]看成由arr[4]和int [3]两部门构成,把arr[4]看成一个整数一维数组,它包罗arr[0]、arr[1]、arr[2]和arr[3]四个元素,每个元素都是int。

晓得了二维数组的那类不凡构造以后,接上去颠末下图来理解二维数组正在内存中的存储构造。image.png颠末上述二维数组正在内存中的存储构造图可以创造,二维数组中的一切元素都存储正在一片延续的内存单元中,所占用的内存巨细为元素规范所占用的内存巨细乘以第一维落选二维的长度。假设以矩阵的体式格局来分析二维数组的存储体式格局,那末先从矩阵第一行从左往右按序存储完一切元素,然后按照异样的法子存储第二行的一切元素,曲到存储完一切数组元素为行。领会了二维数组的不凡构造后,用下图来领会二维数组在内存中的存储构造。通过上述二维数组在内存中的存储构造图,能够创造二维数组中的所有元素都存储在一个持续的内存单位中,所占用的内存大小为元素实例所占用的内存大小乘以第一维和第二维的长度。若是用矩阵的形式来阐发二维数组的存储形式,那么从左到右存储矩阵第一行的所有元素,然后以差别的体例存储第二行的所有元素,曲到存储完所有的数组元素。

让我们看一个二维数组的例子:

肆意输出一个3行3列的二维数组,求角元素之和。

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main() { int arr[3][3]; int i, j, sum = 0; printf("please input:\n"); for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { scanf("%d", &arr[i][j]); } } for (i = 0; i < 3; i++) { for ( j = 0; j < 3; j++) { if (i==j) { sum += arr[i][j]; } } } printf("the result is: %d\n", sum); return 0;}

运转后果以下:[var]关于二维数组就引见到那,前面持续更新。。。运算成果如下:关于二维数组,就是如许,前面不竭更新。。。

您可以还会对下面的文章感兴趣:

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。