Hello everybody!今天我们来学习一下C语言当中数组的相关知识。让我们开始吧!
数组
一维数组
在介绍一维数组之前我们先来了解一下数组的概念。所谓数组,就是一组相同类型元素的集合从这个概念中我们来提取一下关键信息。
-
数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
-
数组中存放的多个元素,类型都是相同的。
数组分为一维数组和多维数组,多维数组中一般常见的是二维数组。
一维数组的创建与初始化
一维数组创建的基本语法如下:
type arr_name[常数值];
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。
-
type指定的是数组中存放数据的类型,可以是:char、short、int、float等,也可以是自定义的类型。
-
arr_name指的是数组名的名字,这个名字根据实际情况来起,需要起的有意义。
-
[]中的常量值是用来指定数组的大小的,这个数组的大小也是根据实际的需求指定就行。
例如:假设我们现在想要存储某个班级的20个人的数学成绩,那我们就可以创建一个数组。
int math[20];
数组的初始化
有时候,数组在创建的时候,我们就需要给定一些初始值,这种就称为初始化。
那数组如何初始化呢?数组的初始化一般使用大括号,将数据放在大括号中。
//完全初始化
int arr[5] ={1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第一个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1,2,3,4};
数组的类型
数组也是有类型的,数组算是一种自定义类型,去掉数组名留下的就是数组的类型。
例如:
int arr1[10];
int arr2[12];
char ch[5];
解答:
arr1数组的类型是int[10]
arr2数组的类型是int[12]
ch数组的类型是char[5]
一维数组的使用
学习了一维数组的基本语法,一维数组可以存放数据,存放数据的目的是对数据的操作,那我们如何使用一维数组呢?
数组下标
C语言中规定数组是有下标的,下标是从0开始的,假设数组有n个元素,那么最后一个元素的下标就是n-1,下标就相当于数组元素的编号。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
在C语言中数组的访问提供了一个操作符[],这个操作符叫做下标引用操作符。
有了这个下标应用操作符,我们就可以轻松的访问到数组的元素了,比如我们访问下标为6的的元素就可以使用arr[6],想要访问下标是3的元素,就可以使用arr[3]。例如:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d ", arr[6]);//7
printf("%d ", arr[3]);//4
return 0;
}
数组元素的打印
接下来,如果想要访问整个数组的内容,那该怎么办呢?
只要我们产生数组所有元素的下标就可以了,我们可以使用前面所提到的for循环来产生0~9的下标,接着使用下标访问就可以了。
代码如下
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
sizeof计算数组元素的个数
在遍历数组的时候,我们经常想知道数组的元素个数,那C语言有办法使用程序来计算数组元素的个数吗?
答:有。可以使用sizeof。
sizeof是C语言中的一个关键字,是可以计算类型或者变量大小的,其实sizeof也可以计算数组的大小。
例如:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", sizeof(arr));
return 0;
}
这里输出的结果是40,计算的是数组所占内存空间的总大小,单位为字节。
而我们又知道数组中所有元素的类型都是相同的,那只要计算出一个元素所占字节的个数,数组的元素个数就能算出来。这里我们选择第一个元素算大小就可以了。
接下来就可以计算出数组的元素个数了:
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
int len = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", len);
return 0;
}
这里的输出结果为10,说明数组有10个元素。
以后再代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,无论数组怎么变化,计算出的大小也就随之变化了,就很nice了!
二维数组
二维数组的概念
前面我们学习了一维数组,如果我们把一维数组作为数组的元素,这就是二维数组,二维数组作为数组元素的数组被称为三维数组,二维以上的数组统称为多维数组。
二维数组的创建
我们如何定义二维数组呢?语法如下:
type arr_name[常量1][常量2];
例如:
int arr[3][5];
double data[2][6];
解释:
-
3表示数组有三行
-
5表示每一行有5个元素
-
int表示数组的每个元素都是整形类型
-
arr数组名
data数组同理,同学们感兴趣可以自己分析一下。
二维数组的初始化
我们先来回忆一下初始化的概念。在创建变量或者数组的同时,给定一些初始值,就叫做初始化。
那么二维数组如何进行初始化呢?
答:类似一维数组,使用大括号初始化的。
//不完全初始化
int arr1[3][5] = {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 arr4[3][5] = {{1,2},{3,4},{5,6}};
//初始化时可以省略行,但是不能省略列
int arr5[][5] = {1,2,3};
二维数组的下标
当我们掌握了二维数组的创建和初始化,那么我们怎样使用二维数组呢?
其实和一维数组一样,二维数组的访问也是使用下标的形式的,二维数组就有行和列的,只要锁定了行和列就能锁定数组中的一个元素。
C语言规定:二维数组的行是从0开始的,列也是从0开始的。
我来拿上面的完全初始化给大家说明一下。
图中绿色区域以外的就是数组的行号和列号,上面的是行号,下面的是列号。现在假设我说:第2行第4列,那么你就可以快速锁定7.
二维数组的输入和输出
访问二维数组的单个元素我们已经知道了,那么如何访问整个二维数组呢?
答:我们只要按照一定的规律产生所有的行和列的数字就行;以上一段代码中的arr3数组为例,行的范围选择0~ 2,列的范围选择0~4.我们就可以借助循环生成所有的下标。
好了,这节课我们就先讲这么多,下节课来讲一下数组的一些练习,我们不见不散!