15、多维数组

1、什么是多维数组

可以简单地理解为由多个一维数组在不同的维度组合而成. 下文以二维数组为主。

2、数组定义格式

元素类型 数组名[元素个数][元素个数][…];

3、初始化
3.1、声明并初始化
1
int s[2][1] = {{1},{2}};
3.2、先声明后再初始化
1
2
3
int score[2][2];
score[0][0] = 90;
score[1][1] = 90;
3.3、声明不指定个数
1
int ss[][1] = {{1},{2}};
4、代码案例
4.1、源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
int main()
{
int s[2][2] = {{0,1},{1,2}};
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 2; ++j)
{
printf("s[%d][%d]=%d\t",i,j,s[i][j]);
}
printf("\n");
}
return 0;
}
4.2、运行结果

运行结果

5、二维数组的内存分析
5.1、源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
int main()
{
int s[2][2] = {{0,1},{1,2}};
printf("==========内存地址==========\n");
printf("&s=%p\n",&s);
printf("s=%p\n",s);
printf("s[0]=%p\n",&s[0]);
printf("s[1]=%p\n",&s[1]);
printf("==========常用输出==========\n");
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 2; ++j)
{
printf("s[%d][%d]=%d\t,address=%p\n",i,j,s[i][j],&s[i][j]);
}
printf("\n");
}
return 0;
}
5.2、运行结果

运行结果

5.3、内存分析
  • 逻辑表格
    |-|-|-|
    |s[0]|-| s[0][0]|-| s[0][1]|
    |s[1]|-| s[1][0]|-| s[1][1]|
  • 物理图
    物理图
5.4、总结

多维数组,可以认为是数组的嵌套。可以从逻辑和物理两个角度进行了解。

  • 逻辑上可以理解为表格,分行和列
  • 物理上,还是连续存储