笔记内容已上传个人博客,推荐在个人博客网站观看!
♪(∇*)欢迎肥来!二维数组 | 洛希的智慧之殿堂 (luoxi.work)
二维数组
①二维数组的定义
类型 数组名[常量表达式][常量表达式]
int a[6][6];//6*6, 6行6列
char b[4][5];//4*5, 4行5列
double c[6][3];//6*3,6行3列
大概的存放形式于下图所示
②二维数组的访问
数组名[下标][下标];
a[0][0];//访问a数组中第1行第1列的元素
b[1][3];//访问b数组中第2行第4列的元素
c[3][3];//访问c数组中第4行第4列的元素
注意:在二维数组中同样要注意下标的取值范围,以防止数组的越界访问
比如int a[3] [4],其“行下标”的取值范围是0-2,“列下标”的取值范围是0-3,超出任何一个下标的访问都是越界访问。
③二维数组的初始化
1.由于二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,12}
如果我们需要将这些数字打印出来,我们可以运用以下的一串代码将其实现,
#include <stdio.h>
int main()
{
int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
对于以上的代码的输出结果如下图所示
2.为了更加直观地表示元素的分布,可以利用花括号将每一行的元素括起来
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}
};
3.二维数组也可以仅对部分的元素赋初值
int a[3][4] = {{1},{5},{9}};
对于以上这种形式大家是否有个疑惑。
就是这个究竟是给数组的第一行的前三个元素进行赋值,还是给前三行的第一个元素赋值呢?
对于以上的疑问我们可以进行用一串代码来解答下这个疑问。
#include <stdio.h>
int main()
{
int a[3][4] = {{1},{5},{9}};
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
这行代码就是将数组内的赋值改成以上的形式。
它的输出结果会是怎么样呢?
通过以上的结果可以看到,很明显第二个想法是正确的!
4.如果希望整个二维数组初始化为0,那么直接在大括号里写一个0即可:
int a[3][4] = {0};
5. C99同样增加了一个新特性:指定初始化的元素。这样就可以只对数组中的某些指定元素初始化赋值,而未被赋值的元素自动初始化为0:
int a[3][4] = {[0][0] = 1, [1][1] = 2, [2][2] = 3 };
6.二维数组的初始化也能偷懒,让编译器根据元素的数量计算数组的长度。但只有第一维度的元素个数可以不写,其他维度必须写上:
int a[][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};