🛸作者:爱编程的小赵
⛽加油站:没有人可以回到过去重新开始,但谁都可以从现在开始,书写一个全然不同的结局。
✍专栏:带你学C语言
目录
🌍. 数组的概念
数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组⼀般比较多见的是⼆维数组。
★☆☆☆☆.一维数组
⼀维数组创建的基本语法如下:1 type arr_name[ 常量值];存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。• type 指定的是数组中存放数据的类型,可以是: char 、 short 、 int 、 float 等,也可以自定义的类型• arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就行。• [] 中的常量值是⽤来指定数组的大小的,这个数组的大小是根据实际的需求指定就行。
★★☆☆☆. ⼀维数组的创建和初始化
我们根据上面两段给的基础知识,可以去试着创建自己的第一个数组。
当然除了存放这种整数数组外,我们也可以试着去创建一个字符数组
在这里我们可以打开数组看看里面的存储情况
其实我们在这里进行的就是初始化的操作,在进行初始化操作时,如果我们规定好了数组的长度,那么我们往里面塞入字母进入数组每个位置后其他位置就会自动以\0填入。
但是如果我们没有设定我们的数组长度,那么如果我们填入的是以一个个字母的形式填入的时候,我们的数组是不会自动在后面填\0,但如果填入的是字符,我们的数组则会在后面填充一个\0。
到这里我们就差不多了解了数组的创建和初始化的基本内容,下面我们来看看数组是怎么使用的
★★☆☆☆.⼀维数组的使用
数组本身就是用来存储字母,数字等字符的,那么它的使用无非就是两个点,如何调用数组的每个元素以及如何存入数组。首先我们刚刚已经知道我们的字符在被存入时是被划入每个区域的,就是arr[数字],那么我们的调用也是如此,在这里我为大家演示一下存入,和调用(这里我们用打印试试)
这里给各位家人们提个醒这里的空格是会被算入到数组中的哦,用字符数组的时候。
最后再分享一个有意思的写法
不过使用这个也要小心哦,如果刚开始素个数没有初始化数组元,那么这个就只能输入一个元素。
★★☆☆☆. ⼀维数组在内存中的存储
其实我们发现数组它是一个存储字符的一个集合,我想我们大多数人是会猜测,数组的每个位置是相邻的,那它究竟是不是相邻的呢,我们在这里可以做做调试,看看他们的地址位置是否是相邻的。那么下面来看看吧。
arr[0]对应地址
arr[1]对应地址
arr[2]对应地址
相信会有一批人看这个地址很懵,但是如果我们吧它当作一个十六进制数字看看,那么我就会发现,它们之间相差是4,刚好是int所占的字节,4个字节,那么数组中每个元素是相邻的也就证明了。
★★★★☆. sizeof计算数组元素个数
如果我们遇到一种情况数组长度没规定,且数组中的元素被人设置好了,请问你究竟该如何知道这个数组的元素个数呢,在这里我先给大家卖个关子,先向大家介绍一个运算符,sizeof(),那这个究竟有什么用呢?它的作用就是去计算你给的东西的大小;
比如在这里我可以用它计算我学过的一些数据类型的大小。
当然我们也可以用它去求我们整个数组的大小,和每个数组的元素的大小。
其实说到这里大多数已经明白了,因为我们数组中的每个元素的类型是一样的,所以只需要用数组总长度除以数组中任意一个元素的长度,就可以求出我们数组中的元素个数啦。
★★★☆☆.二维数组
上面我们讲完了一维的数组,那么下面我们一起来聊聊二维数组,二维数组是怎么个事呢?其实就像站对一样,一维数组是整整齐齐的一行列,而二维数组则是行列都有,成了一个方阵,它的表示 就是arr[行][列]。每个元素的位置也就是你在这里的第几行第几列。
用下面这个图给大家做过范例
★★☆☆☆. ⼆维数组的创建
知道了二维数组的基本情况,我们就可以试着去创建自己的第一个二维数组啦!
🛸升华
其实这里,我们还可以往下深入去讲,你看其实我们每一行的元素是括起来的,我们其实也可以换一种方式理解,就是当作一维数组去理解,那么二维数组就可以理解为arr[一维数组个数][每个一维数组有多少元素],这样去理解是不是更有意思些,既然二维数组存放的是一维数组,那么我们也可以大胆猜测三维数组里存的就是二维数组,当然这是以后要说的哈哈。
★★☆☆☆. ⼆维数组的初始化
二维数组的初始化其实和一维数组的初始化很类似。它就对每个一维数组去做一个分析,比如这个一维数组的元素没有达到我的标准的时候,少元素的填入,那么我就会用\0来填充剩余的位置,这个不多讲了。这里在聊聊如果我们不加括号直接把一堆数字往二维数组里塞会怎么样呢?我们来看看吧。
在这里我们可以看到它是先填满前面的一维数组,再接着往下填入下一个一维数组的,很有意思,其余位置用\0代替。
★★☆☆☆. ⼆维数组的使用
二维数组的使用我们跟一维数组一样也演示输入和输出两个方面。
int main()
{
int arr[3][5] = {0 };
for (int i = 0; i < 3; i++)//多少行
{
for (int j = 0; j < 5; j++)//每一行的元素填入
{
scanf("%d", &arr[i][j]);//填入每个位置
}
}
for (int i = 0; i < 3; i++)//多少行
{
for (int j = 0; j < 5; j++)//每一行的元素填入
{
printf("%d", arr[i][j]);//打印每个位置元素
}
printf("\n");
}
return 0;
}
★★★☆☆. ⼆维数组在内存中的存储
下面就是二维数组在内存中的存储问题了,其实二维数组的存储问题主要针对的其实是二维数组里的每个一维数组是否是连续,因为我们知道一维数组里的每个元素实际上是连续的。那么我们就来一起看看吧。
然后我们惊讶的发现这两个地址居然是一模一样的。那么我们其实就可以大胆猜测其实二维数组里面的存储是这样的。
它里面的一维数组是连续存放的。
🚀. 数组练习
这里的数组练习,大家可以参考小赵的专栏C语言的一些方法:二分查找法。小赵在这里就不细说了。
🌍结束语
好了今天的分享就到这里了,大家可以试着去在平常的一些编程里面去大胆地使用数组,因为数组在我们的C语言中的使用是极其常见的。谢谢大家的阅读。
如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持小赵,如有不足还请指点,小赵及时改正,感谢大家支持!!!