文章目录
- 6. 二维数组的创建
- 6.1 ⼆维数组的概念
- 6.2 ⼆维数组的创建
- 7. 二维数组的初始化
- 7.1 不完全初始化
- 7.2 完全初始化
- 7.3 按照⾏初始化
- 7.4 初始化时省略⾏,但是不能省略列
- 8. 二维数组的使用
- 8.1 ⼆维数组的下标
- 8.2 ⼆维数组的输⼊和输出
- 9. 二维数组在内存中的存储
- 10. C99中的变长数组
- 11. 数组练习
6. 二维数组的创建
6.1 ⼆维数组的概念
如果我们把一维数组做为数组的元素,这时候就是二维数组。二维数组以上的数组统称为多维数组。
也就是说可以理解成二维数组就是由多行一维数组组成的。
6.2 ⼆维数组的创建
二维数组语法:
type arr_name[常量值1][常量值2];
举个例子:
int arr[3][5];
3表示数组有3行
5表示每一行有5个元素,也可以理解成5列
int 表示数组的每个元素是整型类型
arr 是数组名,可以根据自己的需要指定名字
7. 二维数组的初始化
7.1 不完全初始化
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};
7.2 完全初始化
int arr3[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
7.3 按照⾏初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
7.4 初始化时省略⾏,但是不能省略列
int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};
8. 二维数组的使用
8.1 ⼆维数组的下标
二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的元素.
第一行蓝色的数字表示列号,第一列蓝色数字表示行号。
都是从0开始的。
arr[0][0]
=1
arr[1][2]
=8
8.2 ⼆维数组的输⼊和输出
如何访问整个二维数组?
#include <stdio.h>
int main()
{int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };int i = 0;for (i = 0; i < 3; i++) //产生行号{int j = 0;for (j = 0; j < 5; j++) //产生列号{printf("%d ", arr[i][j]);}printf("\n");}return 0;
}
打印:
如果想改变整个数组的元素,并且打印的话就这样:
#include <stdio.h>
int main()
{int arr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};int i = 0;for(i=0; i<3; i++) //产生行号{int j = 0;for(j=0; j<5; j++) //产生列号{scanf("%d", &arr[i][j]); }}for(i=0; i<3; i++) //产生行号{int j = 0;for(j=0; j<5; j++) //产生列号{printf("%d ", arr[i][j]); }printf("\n");}return 0;
}
打印:
9. 二维数组在内存中的存储
我们先打印出数组所有元素的地址:
#include <stdio.h>
int main()
{int arr[3][5] = { 0 };int i = 0;int j = 0;for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);}}return 0;
}
打印:
从输出的结果来看,每一行内部的每个元素都是相邻的,地址之间相差4个字节。
一些特殊的地方,比如说:arr[0][4]
和arr[1][0]
之间也是差4个字节。
所以二维数组中的每个元素都是连续存放的。
10. C99中的变长数组
在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小。
int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};
这样的语法限制,让我们创建数组就不够灵活,有时候数组大了浪费空间,有时候数组又小了不够用。
于是,C99标准中给一个变长数组的新特性,允许我们可以使用变量指定数组大小。
int n = a+b;
int arr[n];
这个例子里面,数组 arr 就是变长数组,因为它的长度取决于变量 n 的值,编译器没法事先确定,只有运行时才能知道 n 是多少。
变长数组的数组长度只有运行时才能确定,所以变长数组不能初始化。
注意:有些编译器不支持C99语法,所以使用变长数组有时会报错。
11. 数组练习
编写代码,演示多个字符从两端移动,向中间汇聚:
#include <stdio.h>
int main()
{char arr1[] = "welcome to bit...";char arr2[] = "#################";int left = 0;int right = strlen(arr1)-1;//得到数组元素个数减一,用作数组最右边一个元素printf("%s\n", arr2);while(left<=right){Sleep(1000);//延时1秒,这个函数只有Windows电脑可以用//这个延时函数可以让下面的打印慢慢出来,比较好玩arr2[left] = arr1[left];arr2[right] = arr1[right];//将arr1中的字符赋值给arr2中的对应位置。这样arr2中的井号被arr1中的字符替换。left++;right--;//left++;和right--;分别将left和right向中间移动,left 向右移动,right向左移动。printf("%s\n", arr2);}return 0;
}
打印: