C语言数组的定义、使用和初始化-学习笔记-5

引入数组

多维度的数据需要更方便的赋值和引用,这样比一个一个的赋值变量要灵活。

数组是什么?

  1. 数组是一组有序数据的集合下标代表数据在数组中的序号
  2. 数组名+下标来表示唯一确定的数组中的一个元素,如 $S_{14}$表示的就是S数组中第14个元素。
  3. 在C语言中,数组中的每一个元素都是同一类型,不同数据类型的数据不能混在一个数组中

例如,数组是用 int 表示的整数,就不能存储 char 字符型数据。

一维数组

一维数组是数组中最简单的了,他的元素只需要用数组名加一个下标,就能在数组中找到该元素了。当然了,后面还有二维、三维甚至多维数组…

定义一个一维数组

数组类型 + 数组名 + [ 常量表达式 ]

常量表达式表示的是数组的长度,也就是数组元素的数量。

例如:

1
2
int boy [20];
//声明了一个 int 型的名字叫 boy 的含有 20 个元素的一维数组

这样我们就定义了一个名字叫做 boy 并且含有 20 个元素的一维数组了。

给数组初始化

我们定义好了数组,需要给各个数组元素赋值,这个赋值的过程就是对数组初始化的过程,当然,我们也可以将数组的初始值留空

1.一次性将数组的所有元素赋值

我们可以在声明数组的时候,就对数组的所有元素进行赋值

1
2
int boy_age[5] = {0,1,2,3,4};
// 这里我们一次性对 boy_age 这个数组的5个元素都赋值了。

2.只对数组的部分元素赋值

我们也可以仅对数组的部分元素进行初始化赋值。

1
2
int boy_age[5] = {0,1};
//只将 boy_age 的前两个元素赋值为0和1。

3.将数组的所有元素都设为0

我们如果需要将数组的初始元素都设置为 0 ,有两种方法;
第一种,我们一个一个的设置。

1
2
int boy_age[5]={0,0,0,0,0};
//逐个将元素的初始值设置为0。

但是如果遇到元素多的时候,就非常不方便了,因此可以

1
2
int boy_age[500] = {0};
//这样,不管元素有多少,我们都可以一次初始化为0.

第二种方式,赋值为0可以,如果想批量赋值为其他数,则只会改变数组的第一个元素的值。

4.如果确定了数组的个数,可以省略掉定义数组长度。

如果我们知道该数组有多少元素,并且在初始化中将其赋值,那么我们可以不用定义数组的长度。

1
2
3
4
5
int boy_age[5] = {0,1,2,3,4};
//我们定义了一个长度为 5 的数组,并逐个赋值。

int boy_age[] = {0,1,2,3,4};
//我们定义了一个含有5个元素的数组,并且逐个赋值了。

上面这两种方式的结果是一样的,都是定义了一个含有 5 个元素的数组,只不过第二种方式是根据元素的数量,判断数组的长度

定义了数组却没有初始化

  1. 数值型,没赋值元素,默认为 0 。
  2. 字符型,没赋值元素,默认为 /0 。
  3. 指针型,没赋值元素,默认为 NULL。

关于下标的玩法

数组的下标,可以设置为变量或者运算后的数值,也就是说在引用数组时,数组的下标可以是变量或者计算得来的结果。

1
2
3
4
5
6
7
int boy_age[5] = {0,1,2,3,4};
printf ( "%d",boy_age[1+3] );
//这样输出的实际上是 boy_age[4] 的值

Int i = 2;
printf ( "%d",boy_age[i] );
//这样输出的实际上是 boy_age[2] 的值

灵活运用下标,可以将数值进行灵活存储,方便后期调用,等于突然出现了很多有规律的变量,方便我们的存储和使用。

二维数组

如果一维数据下面产生了子数据,我们就需要用到二维数组来记录这些数据了。
比如表格,一维数组我们只能记录数组中有那些人,如果在二维数组中,我们就能知道这些人分别都是什么年龄、出生日期、收入情况等信息了。
例如:

定义一个二维数组

定义二维数组和定义一维数组类似,二维数组元素的表示形式为:
数组名[下标][下标]
例如a[2][3]就是一个二维数组,表示的是 a 数组中 3 行 4 列的那个元素,这里可以想象成一个表格。

无论是几纬数组,下标都是从0开始的,所以这里是第 3 行第 4 列

同样,这里的下标也可以进行运算和用变量表示,二维数组也可以参与表达式的计算

初始化二维数组

初始化二维数组和初始化一维数组相同,都是给数组进行赋值,方便我们后续的使用。

1.分行给二维数组初始化

从定义我们可以大概知道,二维数组可以想想成一个行列式,我们通过某行某列来找到这个值,所以我们在赋值的时候,可以分行给二维数组赋值。

我们称二维数组的第一个下标为行序号,第二个下标为列序号

1
2
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//这就是逐个给二维数组中的所有元素赋值

上面的赋值包含两层括号,最外层花括号表示的是给数组赋值,里面的第一个花括号,表示给 3 行元素中的第一行赋值,第二个花括号表示给 3 行元素的第二行元素赋值,以此类推~
3X4=12共12个元素,都依次赋值了。

第几个花括号表示第几行括号内的表示这一行的第几个元素

1
2
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//一次性给所有元素赋值

这样写也可以,元素值会依次赋值到各个元素,但是这样写没有层次界限,会显得非常的乱,推荐使用第一种方法。

2.对部分元素进行赋值

就像一维数组一样,我们同样可以对二维数组的部分元素进行赋值。

1
2
int a[3][4] = {{1},{5},{9}};
//这就是给每行的第一个元素赋值了

我们给每行的第一个元素赋值为1,5,9,其他元素初始化为0,因为元素默认初始化为0,所以我们可以根据这个特性,给二维数组的任意位置初始化赋值。

1
2
int a[3][4] = {{0,0,0,1},{0,0,5},{9,2}};
//这就是给每行的第一个元素赋值了

这样的结果就是

1
2
3
0 0 0 1
0 0 5 0
9 2 0 0

3.全部赋值

如果我们一次性将所有的元素都赋值时,我们就可以省略定义数组时的数组长度了.

1
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

因为是二维数组,要对数据进行分组,所以只能省略第一个行序列,不能省略第二个列序列

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!