一、二维数组的定义
当一维数组元素的类型也是一维数组时,便构成了“数组的数组”,即二维数组。二维数组定义的一般格式:
dataType arrayName[length1][length2];
其中, dataType 为数据类型, arrayName 为数组名, length1 为第一维下标的长度, length2 为第二维下标的长度。
我们可以将二维数组看做一个 Excel 表格,有行有列,length1 表示 行数 ,length2 表示列数,要在二维数组中定位某个元素,必须同时指明行和列。
例如:
int a[4][6];
二、二维数组元素的引用
二维数组的数组元素引用与一维数组元素引用类似,区别在于二维数组元素的引用 必须给出两个下标 。
引用的格式为:
arrayName[length1][length2];
例如:
int a[3][4];
定义了一个 3 行 4 列的二维数组,共有 3×4=12 个元素,数组名为 a,即:
a[0][0], a[0][1], a[0][2], a[0][3]
a[1][0], a[1][1], a[1][2], a[1][3]
a[2][0], a[2][1], a[2][2], a[2][3]
二维数组的行下标和列下标都从0开始;如果想表示第 1行第 1 列的元素,应该写作 a[0][0]
,第n行第m列对应数组元素a[n-1][m-1]
。
a[2][3]
即表示第3行第4列的元素。
三、二维数组的初始化
初始化为0:
① 定义为全局变量,定义为全局变量的二维数组默认会被初始化为0。
② int a[N][M]= {0}; 将所有N*M个元素全部初始化为0(只有初始化为0可以这么写)。
初始化为其他值:
① 全部初始化: 二维数组的每一行是一个一维数组,可以按照一维数组的方式初始化,最外层再加一个大括号“{}”。
示例1:int a[3][2] = { {1, 2}, {4, 5}, {7, 8} } ; (内部大括号之间由英文逗号分隔)。
示例2:char c[3][2] = { {'a', 'b'}, {'c', 'd'}, {'e', 'f'} } ;
② 部分初始化:
示例:int a[3][3] = { {1, 2}, {4, 5} }; (初始化第0行和第1行的前2个元素)。
四、二维数组的输入输出
二维数组的输入:
示例:读取3行2列的整数矩阵,存储到二维数组中:
int a[5][5];
for(int i=1; i<=3; i++)
{
for(int j=1; j<=2; j++)
{
cin>>a[i][j];
}
}
二维数组的输出:
将上述矩阵保持原来的行和列原样输出。
int a[5][5];
for(int i=1; i<=3; i++)
{
for(int j=1; j<=2; j++)
{
cout<<a[i][j];
}
}
五、逆序输出矩阵
const int N=101,M=101;
int n,m,a[N][M];
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)//从上往下一行一行读取
{
for(int j=1; j<=m; j++)//从左往右一列一列读取
{
cin>>a[i][j];//存放于指定位置
}
}
for(int i=n; i>=1; i--)//从最后一行往前读取
{
for(int j=m; j>=1; j--)//从最后一列往左读取
{
cout<<a[i][j];
}
}
return 0;
}