一.前言
嗨嗨嗨,大家好!很高兴又见面了。上文我们讲到了关于运用循环与分支结构编写的小游戏“猜数字游戏” ,今天我们开始进入新的篇章——数组。这是一个全新的章节,接下来就随我一起探索数组的世界吧。
二.正文
1.数组的概念
数组是一组相同类型元素的集合;从这个概念中我们可以发现2个有价值的信息:
(i):数组中存放的是一个或者多个数据,但是数组元素个数不能为0。
(ii):数组中各个元素的数据类型都是相同的(比如都是int或char类型等等)
同时数组分为一维数组和多维数组,多维数组一般我们常见的就是二维数组。
2.数组——一维数组
2.1一维数组的的创建
一维数组的基本语法为:
数组在创建的时候,可以定义数组的大小与数组的元素类型,其中存放在数组中的数值被称为数组的元素。
type:指的是数组名的类型,如int ,char,float类型等
arr_name:指的是数组名的名字,这个名字并没有具体语法要求,可以随便取名,但还是推荐取得有意义即可。
[]:这个符号是可以定义这个一维数组的大小的,即可以存放多少个数组元素,根据需求自定义数组的大小。
2.2 关于一维数组的具体实践
例子:我们想通过创建一个数组,来存储一个班20人的数学成绩:
2.3数组的初始化
数组的初始化其实和我们平常定义一个变量一样,如int a=0;只不过数组的定义稍微复杂了一些,存在完全初始化,不完全初始化的区别,偶尔还有数组元素超出所定义数组大小的情况。下面我将会为大家分享一下代码后你们就明白了:
2.4数组的类型
数组也是有类型的,一个数组去掉数组名剩下的部分就是该数组的数组类型,请看vcr:
3.关于数组的使用
3.1数组下标
C语言规定数组是有下标的,下标是从0开始直到n-1(n是该数组中元素的个数);如int arr[5]={1,2,3,4,5}中数组中元素从左到右下标分别是0,1,2,3,4;
3.2访问数组中的数组元素
在我们访问数组中的元素的时候,我们可以借助于"[ ]"这个符号,是不是和定义数组大小时候所用的那个符号很像?没错就是int arr[ 5];中5外面的那个符号,只不过在我们访问数组元素的时候它被称为:“ 下标引用操作符”。
在上面我们提到了下标,因为[ ]它所引用的是数组元素的下标,所以[ ]内的数字总是比我们想要引用的那个数组元素小1,就比如我们想要引用数组arr[5]={1,2,3,4,5}中的3我们就需要这样写arr[2],
配合代码你可能会更加理解这段话的意思:
3.3 整个数组的打印
上面我们已经给大家展示了单个数组元素打印的方法,接下来我将为大家分享如何借助循环结构将整个数组元素全部打印出来。公主王子请看:
本段代码中我们设置了一个变量i,可以将i看作是数组的下标表示,我们通过i++将i从0加到9,并通过循环将i所对应的下标依次存入数组arr[i]中,就可以实现所有数组元素的打印。
3.4数组的输入
完成数组的定义后,我们可以通过scanf函数,输入我们想要的数组元素值。当然想要完成整个数组的输入,也是需要借助循环来完成滴。请看代码展示:
通过以上代码可以看出,我们可以任意输出我们想要的数值,并存储在数组中,关于数组的输入我曾经也困惑了一段时间,因此为了大家有更深的理解,我想为大家分享我的拙见:
对于数组输入那段代码,每次输入的是arr[i]的值而不是i的值。每次输入,下标i也会从0加到9。即我们每次输入的值依次对应着i增加时的下标,就比如上面我们输入的1,4,5,6,7,83,0对应着i下标的0,1,2,3,4,5,6,7,8,9。已经输入完的数值被存放在arr数组中,充当数组元素,最后通过下面for循环printf语句输出出来。
4.一维数组在内存中的存储
接下来我们探讨一下一维数组在内存中的存储。
依次打印数组元素的地址:
如图所示,我们可以发现相邻两个数组元素之间地址的差值都是4,联想到1个整形是4个字节可知:数组在内存中是连续存放的。
5.使用sizeof求数组元素个数
我们可以通过计算一个数组中所有数组元素的字节后,再将这一结果除于这个数组中其中一个数组元素字节,就可以求出该数组中数组元素的个数。
王子公主请看代码展示:
这个我们就能够求出数组中的元素个数啦,用sizeof求出数组元素的个数,目的是为了在日后我们想要修改数组大小的时候,可以少改一些地方,直接使用sizeof[arr]/sizeof(arr[0]),不怪数组大小如何改变都不会影响我们最后输出正确的数组大小(即数组元素个数)。
三.总结
之后我也会分享sizeof与strlen的区别,好啦,最后的最后感谢王子公主们的观看,我们下期在见。拜拜咯!