## 二维数组的遍历和存储 ## 二维数组的遍历 - 二维数组a[3][4],可分解为三个一维数组,其数组名分别为: + 这三个一维数组都有4个元素,例如:一维数组a[0]的 元素为a[0][0],a[0][1],a[0][2],a[0][3]。 + 所以遍历二维数组无非就是先取出二维数组中得一维数组, 然后再从一维数组中取出每个元素的值 - 示例 ```c char cs[2][3] = { {'a', 'b', 'c'}, {'d', 'e', 'f'} }; printf("%c", cs[0][0]);// 第一个[0]取出一维数组, 第二个[0]取出一维数组中对应的元素 ``` ```c char cs[2][3] = { {'a', 'b', 'c'}, {'d', 'e', 'f'} }; for (int i = 0; i < 2; i++) { // 外循环取出一维数组 // i for (int j = 0; j < 3; j++) {// 内循环取出一维数组的每个元素 printf("%c", cs[i][j]); } printf("\n"); } ``` > 注意: 必须强调的是,a[0],a[1],a[2]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量 --- ## 二维数组的存储 - 和以为数组一样 + 给数组分配存储空间从内存地址大开始分配 + 给数组元素分配空间, 从所占用内存地址小的开始分配 + 往每个元素中存储数据从高地址开始存储 ```c #include int main() { char cs[2][3] = { {'a', 'b', 'c'}, {'d', 'e', 'f'} }; // cs == &cs == &cs[0] == &cs[0][0] printf("cs = %p\n", cs); // 0060FEAA printf("&cs = %p\n", &cs); // 0060FEAA printf("&cs[0] = %p\n", &cs[0]); // 0060FEAA printf("&cs[0][0] = %p\n", &cs[0][0]); // 0060FEAA return 0; } ``` ![](https://img-blog.csdnimg.cn/img_convert/b3da2217fbaf93e346a390a47cad9a50.png) ## 最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。 开源不易,码字不易,如果觉得有价值,欢迎分享支持。