一、数组的概念
概念:数组是同一组相同类型元素的集合;
从以上概念中我们可以得到两个信息:
1、数组中存放一个或者多个数据,并且数组元素的个数不能为0;2、数组中存放的多个元素,类型是相同的。
同时数组又分为一维数组和多维数组,多维数组多为二维数组。
二、数组的创建和初始化
2.1、数组创建
type arr_name [常量值]
分别表示:数组类型、数组名字、数组大小
例如我们要创建一个全班数学成绩的数组:
int math [20];
但是以上数组内部是没有元素的,需要对数组进行初始化。
2.2、数组的初始化和数组类型
(1)、完全初始化
int arr1 [5] = {1,2,3,4,5}
也就是数组中每个元素都赋值,都确定一个值,也就是完全初始化
(2)、不完全初始化
int arr2 [6] = {1,2}
也就是不全部都给赋值,这样后面默认就为0;
(3)、数组的类型
这里需要注意的是,并不是数组内部元素是什么类型,数组就是什么类型。数组的类型是一种自定义类型,去掉数组名就是数组的类型。例如上文中数组的类型分别为:int [5]和 int [6],把arr1 arr2这两个名字去掉,剩下的就是数组类型。
三、一维数组的使用
3.1、数组下标
数组内部元素是有下标的,下标从0开始。例如数组里面有n个元素,最后一个数组的元素的下标就是n-1。下标就相当于数组的编号。如下:
数组:int arr [10] = {1,2,3,4,5,6,7,8,9,10}
下标: 0,1,2,3,4,5,6,7,8,9
数组访问有个操作符--[ ],这个操作符为下标引用操作符。也就是在int后面的 [ ] 的定义数组内部元素个数,如果在printf后面就是数组访问符
3.2、数组元素的打印
如果想要访问整个数组,可以用 for 循环产生0到9十个下标,通过十个下标访问数组内部的元素。
如图,通过for循环访问数组内部的元素,并打印
3.3、数组的输入
数组的打印就相当输出,数组既然有不完全初始化,那么就可以通过后续的输入让数组完成后续初始化。
如上图所示,通过scanf函数向数组中输入数据,然后通过printf打印出来,虽然数组原来有元素,但是可以通过scanf函数人为改变。
四、计算数组中的元素个数
这里我们需要明确一件事情:数组中的每个元素都要占据内存,每个元素占据内存的和就是整个数组占据的总内存,数组内部每个元素所占的内存都是相同的。
这也是我们计算元素个数的基本运算方式。
五、二维数组
5.1、二维数组的概念
如果把一维数组作为数组元素,组成新的数组,这就是二维数组。同样的,二维数组作为数组元素组成三维数组。
5.2、二维数组的创建
定义二维数组的语法如下:
type arr_name [常量值1] [常量值2];
例如:int arr [3] [5];
3表示数组有三行,5表示每行有五个元素,int是数组每个元素是整形类型,arr是数组名。
5.3、二维数组的初始化
不完全初始化:
int arr1 [2] [3] = {1,2};
int arr2 [3] [5] = { 0 };
完全初始化:
int arr3 [3] [5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7}
初始化时可以省略行但是不能省略列
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 }};
如图所示,二维数组也是从0开始的,然后行和列各自计算位置
5.4、二维数组的使用
如同一维数组利用下标,二维数组也要利用下标进行定位和使用。二维数组只要锁定了行和列就可以定位到具体的数组元素。
如图,数组一共有三列五行,arr[2] [4]意为第二行第四列。
同时二维数组也可以像一维数组那样,写入数据和读取数据