二维数组的概念二维数组是相同数据类型元素按行和列排列的矩形集合可以把二维数组写成行和列的排列形式来理解二维数组的逻辑结构。站在一维数组的基础上理解二维数组可以理解为二维数组是把一维数组作为数组的元素。二维数组的创建和初始化语法如下type arr_name[常量值1][常量值2]创建示例int arr[2][3];表示定义了一个2行3列的数组。完全初始化#includestdio.h int main() { int arr[4][2] { 1,2,3,4,5,6,7,8}; return 0; }程序会根据2行3列的方式依次进行初始化.指定行和列进行初始化#includestdio.h int main() { int arr1[2][3] { {1,2,3},{4,5,6} }; int arr2[2][3] { {1,2},{4} }; return 0; }不完全初始化#includestdio.h int main() { int arr1[2][3] { {1,2,3},{4,5,6} }; int arr2[2][3] { {1,2},{4} }; return 0; }在定义数组时可以省略行不能省略列。二维数组的访问二维数组的访问是通过[]的方式进行访问如上图所示如要确定arr1中数据3的位置我们可以通过行和列确定。行为0列为2. 在C语言中确定方式为数组名[行][列]的方式。、arr[0][2]: 对应数据为3arr[1][0]: 对应数据为4arr[1][2]: 对应数据为6通过数组下标访问元素访问单独数据#includestdio.h int main() { int arr[2][3] { 1,2,3,4,5,6 }; printf(%d\n,arr[0][2]); printf(%d\n,arr[1][0]); printf(%d\n,arr[1][2]); return 0; }访问数组当中的所有数据#includestdio.h int main() { int arr[2][3] { 1,2,3,4,5,6 }; int row 2; int col 3; for (int i 0; i row; i) { for (int j 0; j col; j) { printf(%d , arr[i][j]); } printf(\n); } return 0; }给数组输入元素#includestdio.h int main() { int arr[2][3]; int row 2; int col 3; for (int i 0; i row; i) { for (int j 0; j col; j) { scanf(%d, arr[i][j]); } } for (int i 0; i row; i) { for (int j 0; j col; j) { printf(%d , arr[i][j]); } printf(\n); } return 0;在这个过程中for (int i 0; i row; i)这是一个常见的访问/输出一个数组内的数据的方式在day10中也用了这类似的for循环·。二维数组在内存当中的存储二维数组的内存特性数组本身就是一块连续的存储空间所以无论是一维数组还是二维数组我们通过打印地址可以发现内存确实是连续的空间。#includestdio.h int main() { int arr[2][3] {0}; int row 2; int col 3; for (int i 0; i row; i) { for (int j 0; j col; j) { printf(arr[%d][%d] %p\n, i, j, arr[i][j]); } } return 0; }C99中的变长数组在C99标准之前C语言在创建数组的时候数组大小的指定只能使用常量、常量表达式或者如果我们初始化数据的话可以省略数组大小。int arr1[10]; int arr2[35]; int arr3[] {1,2,3};这样的语法限制让我们创建数组就不够灵活有时候数组大了浪费空间有时候数组又小了不够用的。C99中给一个变长数组variable-length array简称 VLA的新特性允许我们可以使用变量指定数组大小。请看下面的代码int n a b; int arr[n];上面示例中数组arr就是变长数组因为它的长度取决于变量n的值编译器没法事先确定只有运行时才能知道n是多少。变长数组的根本特征就是数组长度只有运行时才能确定所以变长数组不能初始化。变长数组的好处是程序员不必在开发时随意为数组指定一个估计的长度程序可以在运行时为数组分配精确的长度。有一个比较迷惑的点变长数组的意思是数组的大小是可以使用变量来指定的在程序运行的时候根据变量的大小来指定数组的元素个数而不是说数组的大小是可变的。数组的大小一旦确定就不能再变化了。