二维数组(未完?)

来源:互联网 发布:windows软件下载 编辑:程序博客网 时间:2024/05/06 02:20

我们知道,一维空间是一条线,数学中用一条数轴来表达;二维空间是一个平面,数学中用平面坐标系来表达。那么二维数组又是什么样的呢?
线与面

我们用一个下标来描述一维数组中的某个元素,就好像在用数描述一条线上的点。而所有的数据都是存储在一条线上。如果我们采用两个下标,就能形成一个平面,犹如一张表格,有行有列,所有的数据就能够存放到表格里。

我们把二维数组的两个下标分别称为行下标和列下标,在前面的是行下标,在后面的是列下标。那么什么时候要用二维数组呢?一般有两种情况,一种是描述一个二维的事物。比如用1表示墙,用0表示通路,我们可以用二维数组来描述一个迷宫地图;用1表示有通路,0表示没有通路,我们可以用二维数组来描述几个城市之间的交通情况。还有一种是描述多个具有多项属性的事物。比如有多个学生,每个学生有语文、数学和英语三门成绩,我们就可以用二维数组来描述。对于第二种情况,我们要注意各项属性应该是同一种数据类型,比如三种学科的成绩都是整数。如果出现了姓名(字符串属性),就不能将他们组合到一个二维数组里去。所以不要企图将不同数据类型的属性整合到一个二维数组中去。



二维数组的声明和初始化

二维数组的声明和一维数组是类似的,不同之处只是多了一个下标: 数据类型数组名[行数][列数];要注意,二维数组的下标也都是从0开始的。二维数组的初始化分为两种,一种是顺序初始化,一种是按行初始化,我们来看一段程序,就能够对它们有所了解了:(程序7.4.1)#include “iostream.h”#include “iomanip.h”int main(){ int array1[3][2]={4,2,5,6};//顺序初始化 int array2[3][2]={{4,2},{5},{6}};//按行初始化 cout <<”array1” <

#include "iostream.h"#include "iomanip.h"void disp(int a[][2],int r,int c);//告知数组的列数int main(){   int array[3][2]={4,2,5,6,3,1};   cout <<"array" <<endl;   disp(array,3,2);   return 0;}void disp(int a[][2],int r,int c){   for (int i=0;i<a.length();i++)   {          for (int j=0;j<a[i].length();j++)      {                 cout <<setw(2) <<a[i][j];          cout <<endl;   }}

运行结果:array4 25 63 1

二维数组转化成一维数组

有些时候,我们觉得用二维数组来描述一样事物很方便。比如我们用二维数组来画一个迷宫地图,行下标和列下标就如同直角坐标系一样。可是在某些情况下,不能使用二维数组,或者难以制造一个二维数组。二维数组在内存中的存储情况和一维数组是相同的,所以我们只好用一个一维数组来代替它了。

于是,我们不难总结出一个结果,一个二维数组元素a[x][y]在一维数组b中,是: a[x][y]=b[x*列数+y]

0 0