二维数组的创建,初始化,使用。
(一)二维数组的创建
二维数组定义的一般形式:类型说明符 数组名[常量表达式][常量表达式]
举例如下:
int a[3][4];
//定义a为 3*4(3行4列) 的数组。
二位数组又可以看作是一种特殊的一维数组:它的元素又是一个一维数组。
举例如下:
int a[3][4];
//可以看作a是一个一维数组,它有3个元素:a[0],a[1],a[2]。
//每个元素又是一个包含四个元素的一维数组。此时a[0],a[1],a[2]做一维数组名。
//a[0]——a[0][0],a[0][1],a[0][2],a[0][3]
//a[1]——a[1][0],a[1][1],a[1][2],a[1][3]
//a[2]——a[2][0],a[2][1],a[2][2],a[2][3]
二维数组中元素在内存中是连续存放的,元素的排列顺序是按行排放的,即izai内存中先存放第一行的元素,紧接着存放第二行的元素,以此类推…是线性的,不是二维的。
(二)二维数组的初始化
int a[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
//这两行代码等价
//结果为:1 2 3 4
// 5 6 7 8
// 9 10 11 12
//第1行代码是分行给二位数组赋值。
//2行代码是将所有数据写在花括号内,按数组元素在内存中的排列顺序对各元素赋值。
int a[3][4] = { { 1 }, { 2 }, { 3 } };
//对部分元素赋值。
//结果为:1 0 0 0
// 2 0 0 0
// 3 0 0 0
int a[3][4] = { { 1 }, { 0, 2 }, { 0, 0, 3 } };
//对每一行中的部分元素赋值
//结果为:1 0 0 0
// 0 2 0 0
// 0 0 3 0
int a[3][4] = { { 1 }, { 3, 4 } };
//只对某几行元素赋初值
//结果为:1 0 0 0
// 3 4 0 0
// 0 0 0 0
注意:在某些情况下行的长度可省略,但是在任何情况下列的长度都不能省略!
//如果对全部元素都赋初值,则定义数组时对一维的长度可以不指定。
//下面两行代码等价。
int a[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
int a[ ][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
//结果为:1 2 3 4
// 5 6 7 8
// 9 10 11 12
//在定义时也可以只对每行元素都赋初值,此时省略一维的长度。
int a[ ][4] = { { 1 }, { 2 }, { 3 } };
//结果为:1 0 0 0
// 2 0 0 0
// 3 0 0 0
(三)二维数组的使用
*二维数组也是通过访问的。
*二维数组大小的计算:
代码如下:
int a[3][4] = { 0 };
int sz_i = sizeof(a) / sizeof(a[0]);
int sz_j = sizeof(a[0]) / sizeof(a[0][0]);
二维数组的举例:
(1)举例1
//输入并打印一个二维数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[3][4] = { 0 };
int i, j;
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
a[i][j] = i+j;
printf("%d ",a[i][j];
}
printf(" \n");
}
system("pause");
return 0;
}
(2)举例2