数组
前言:用好数组的前提是熟练掌握循环!
1,举个例子
数组类似于超市门口的寄存柜,每个小柜子都有自己的编号,一个小柜子也只能存放一个人的东西。
数组的名称就像柜子的名称,它可以叫天兴罗斯福广场的柜子,也可以叫沃尔玛超市的柜子。
数组的类型就像柜子的用途,可能给顾客存放食物,可能给顾客存放日用品。
数组的元素就是顾客寄存在柜子里的东西。
因为柜子有编号,所以顾客能立刻就找到寄存的物品在哪里,数组起到的作用就和这个柜子一样。
2,数组的定义
数组包括三部分——类型
名称
大小
,数组有了这三部分,才能真正起到存储元素的作用。
类型和变量一致,可以是int
double
等类型,也就是任意有效的C语言数据类型。
在定义时数组的大小要用一对中括号括起来。
例如:
/*定义一个可以存储你双十一买的每一件物品的价格的数组
假设你买了5件衣服*/
double cloth[5];
数组名称为cloth;因为要存储的是钱数,它的类型被定义为了有小数的double;而你一共买了5件衣服,所以你只需要开辟5个大小的数组就足够存储衣服的单价了 。
3,数组的下标
为了方便取出数组中的元素,在数组写入元素的时候每个元素的位置就固定了,每个位置都有一个编号(类比柜子的编号),这个编号也就是下标是从0开始的整数,并且逐一递增。
所有的数组都是以0作为他们第一个元素的索引,也被称为基索引
4,数组的初始化
数组的初始化有三种方式:
/*方法1*/
int array[5] = {1,2,3,4,5}; //{}内元素个数不能多于5
/*方法2*/
int array[] = {1,2,3,4};//此时数组有4个元素,相当于[4]
/*方法3*/
int array[5];
array[0] = 1; /*中间三个赋值过程略去不表*/
array[4] = 5; /*第一次赋值为1,第五次赋值为5*/
方法一常用场景:
数组只需要定义一次,后续不做过多改变。
/*方法一举例*/
int leapYear[12]={31,29,31,30,31,30,31,31,30,31,30,31};
上述例子用leapYear这个数组存储闰年12个月每个月的天数。每个月的天数是固定不变的,以后使用的时候也不需要对数组重载,所以可以直接在定义的时候进行赋值。
方法二emmm……
方法二还是不要多用的好,我因为用方法二被学长骂过,故这里不举例。
方法三常用场景:
我觉得第三种方法使用的多。我说的使用并不是在定义时就直接赋值,而是在一些在定义的时候无法进行赋值的情况下,使用循环来写入数组。
/*方法三举例*/
int a = 12345, array[5];
for(int i = 0; i < 5; i++){
array[i]=a%10;
a/=10;
}
以上代码可以将整数a的每一位数都存入数组中,可以自己运行代码试一试。
5,访问数组元素
访问数组元素时可直接根据下标从数组中获得对应下标中存储的值。
继续使用方法三中的代码:
int num = array[3];
printf("%d", num);
上面代码运行后输出的应该是2,数组 array
中的第4个元素。
6,一维数组与多维数组
一位数组类似一条线段,上面的点仅有长度。
二维数组类似一个平面直角坐标系,其中的元素是(x,y)这样的点集。
多维数组就是类比推理,比如三维数组就是空间直角坐标系,有长度、深度、广度三个性质。
二维数组总体与一位数组相同,但二维数组的非定义时赋值需要双层for循环嵌套写入。
由于主要介绍一位数组,二维数组不再继续深入。