第九章
任务一:二维数组的定义和使用
任务二:二维数组的对称交换
小结
习题
上一章我们学习了“一维数组”的定义和使用,今天我们来学习“二维数组”,
其实我们可以理解,“一维数组”中的抽象的“一维”化为具体就是我们数学中的“线”,那么抽象的“二维”化为具体就是“面”,抽象的“三维”化为具体就是“空间”,抽象的“四维”化为具体就是“时间+空间”,“n维”……(=-=)
在C语言中,二维数组是这样定义的,如下代码:
第一行,我们先定义一个二维数组,数组名为a,数组元素(成员)共有 3×3=9个(这里我们可以理解为 矩形的面积计算,长(无穷的点)x宽(无穷的点)=面积(无穷的点)我们不考虑“点”的无穷性,在这里根据我们的代码中写的,a[3][3]我们就认为,3(长)x3(宽)=总数(面积)),
后面这几行都是输出我们二维数组名为a中的所有元素(成员)
#include<stdio.h> int main() { int a[3][3]={1,2,3,4,5,6,7,8,9}; printf("%d %d %d \n",a[0][0],a[0][1],a[0][2]); printf("%d %d %d \n",a[1][0],a[1][1],a[1][2]); printf("%d %d %d \n",a[2][0],a[2][1],a[2][2]); return 0; }
代码调试截图:我们根据调试截图可以认为,a[x][y];中,x代表“行”,y代表“列”
通常我们往后使用的话应该多维数组会用的多一点,例如,我们去用python,编写机器人的肢体动作,例如编写机器人的抬手动作时,我们需要在a[大臂][小臂]这样的数组,抬手时数组中“大臂”的数值在不断的变化,“小臂”的数值不变,然后某个过程中数组“大臂”“小臂”都会发生变化,(这里的“大臂”“小臂”就是机器人摆动的幅度或角度大小),(当然这只是简述方便大家理解,具体很麻烦)
二维数组或者多维数组的内存分部图如下:
我们用代码将他们的地址分别输出出来,
代码如下:
#include<stdio.h> int main() { int a[3][3]={1,2,3,4,5,6,7,8,9}; for(int i=0;i<3;i++) for(int j=0;j<3;j++) printf("a[%d][%d]=%d &a[%d][%d]=%d\n",i,j,a[i][j],i,j,&a[i][j]); return 0; }
调试代码截图如下:我们看到了每一个值以及它们的内存地址,从第一个开始,内存地址依次+4,这个“4”指的是int(整数类型)的内存所占的字节大小。
感觉有一个非常大的缺点,就是二维数组没有一维数组那么灵活,因为,用代码来解释
代码如下:
#include<stdio.h> int main() { int a[]={1,2,3,4,5,6,7,8,9}; int a[][]={1,2,3,4,5,6,7,8,9}; return 0; }
代码调试截图如下:这里出错了,错误提示大概是这里必须要规定元素(成员)数量的多少
试一试二维数组支持不支持常量,
代码如下:定义两个常量 “z”,”s”它们的值都为“3”
#include<stdio.h> # define z 3 # define s 3 int main() { int a[z*s]={1,2,3,4,5,6,7,8,9}; int a[z][s]={1,2,3,4,5,6,7,8,9}; return 0; }
代码调试截图如下:我们也发现了,常量也不行,而且下方错误提示,编译器它无法识别这种写法,然后下面又给出了一个提示,说我们可以改写二维数组变一维数组然后再进行定义,,
看来以后使用多维数组时,要多定义一些,为了我们以后更新程序留下空间,否则,你将会体验到bug接连不断的噩梦!
评论抢沙发