C语言学习小白总结:数组篇

序言

在本小白博主的长时间摆烂之下,终于迎来了对数组的详细讲解与总结

正文

在学习完C语言的循环分支之后,就要开始学习又一重量级的版块:数组
无论是后期的指针还是结构体,动态内存管理等等之类的知识,都或多或少都要联系数组。那么什么是数组,数组有什么用? 本IKUN将用以下几点详细讲解

1.什么是数组?

数组从字面来看,顾名思义就是一堆数存放在了一起,一系列同类型数的集合。

①既然创建了数组,那么数组的数量必须是不为0的 

②数组是同类型的

当我们讲变量的创建的时候,就必然少不了变量在内存中的存储。在程序运行的时候,操作系统就会给程序提供一块内存空间,内存空间又被划分为一个个的内存单元(一个内存单元1个字节),这些内存单元都有对应的从高到低的地址,在这些内存单元中可能存放着数据或者汇编指令。所以,当一个变量被创建的时候,变量的数据就会被存放在某一块内存单元(具体怎么存放,存放在哪个区后期会讲解)。那么当创建数组的时候,数组中的数据就会井然有序的存放在一块内存区域。

2.数组的创建

讲完了什么是数组,接下来是数组的创建,数组的创建也非常的简单 

①只需要 type  name[数组成员数,正整数常量]={n,n1,n2....}。注意,这里的数据要跟定义的类型要对的上type 指的是数组中存放数据的类型, char、short、int、float 等之类

②数组成员数在VS之中是不可以以变量进行代替的,只能以具体的数或者常量进行代替,但在C99版本标准之后,他是允许使用变量的 那么C99之前要怎么进行未知大小数组的创建呢(这就涉及到后面的动态内存管理的知识)

③数组初始化的时候,数据的个数不能超过数组大小的本身的 当你不确定个数的时候,数组成员数可以不去填入 但必须赋值

④当你想一劳永逸,将数组的各个成员的数据置为0时,可以直接写成 type  name[数组成员数]={0}; 但这时候成员数要写入 char类型的数组格式可以写成char  name[数组成员数]="abcdef ";

3.数组的使用

①数组的使用和创建是不一样的,数组在创建的时候要明确数组的成员数的数量,他是个具体的数字。但在使用的时候就类似于编号之类(我们称之为下标),C语言规定数组的使用是从0开始的

所以在使用数组的时候括号里面的数字,也就是下标 最大是数组成员数-1.

所以使用数组就直接 name[下标]就行了,它会返回一个数组对应下标的数据,假设我要给变量a赋值数组第三个的数值 我们就可以

但当我们访问超过成员数个数的数组成员和对其会怎么样呢?

很明显就直接报错了,究其原因是我们访问了没被定义的变量,也就是越界。 给定一个数组也就给定了一块分配给数组的空间,我们是不可以超过这个空间的,因为这块空间是系统给定的,可能在这之外是什么重要的东西,被访问了可以造成不可估量的后果。所以,当你这样操作 系统就会;

② 那么怎么访问一个数组的所有成员和赋值呢 其实很简单 用上节课的for循环语句就能实现了

4.数组的大小

1-3就是数组的基础内容了,但当我们要灵活的运用数组 我们就必须知道他在内存中的大小

要怎么知道一个数组或者一个数据类型的大小呢? 很简单 只需要 调用sizeof(类型名)这个函数就行了  它的返回值是整型

很明显能看出来 一个整型占4个字节 一个字符类型占1个字节 那么是不是说明一个整型变量空间就开辟四个字节 也就是四个内存单元呢?  答案是肯定的 我们可以通过VS调试窗口里面的内存看到

既然如此,我们可以大胆猜测 一个整型数组的大小是不是一个整数大小*成员数呢

我们再通过代码演示

很明显,答案也是正确的 注意:sizeo(arr)代表的是读取整个数组的大小

那么,我们清楚了数组在内存中的存储和怎样存储,那么我们对数组的运用就更加的灵活,这也为后面的指针做了点基础和铺垫

有了一维数组,是不是以为着有二维数组了呢?

5.二维数组的创建与使用

二维数组像是有点套娃,简单来说就是数组中的数组, 举个例子就是

班级里面的学生有各自的座位,这些座位分为5列 一列有10个学生 那么一列中的学生数量就是这一列的数组 这5列是列的数组

有点像是高代里面的矩阵

①二维数组的创建 是建立在一维数组上的 type arr[常量值1][常量值2];

②完全初始化;格式上可以是{n,n1,n2....}这样子直接写 也可以按组来分列{{1,2,3},{4,5,6}}之类的

③不完全初始化;int arr1[3][5] = {1,2}; int arr1[3][5] = {0}; 这样子是不完整的 你输出出来是个乱七八糟的数

④[2][1] 这里的[2]代表行 [1]代表列 行是可以省略  但列不能这样 因为我们要确切知道每一列有几个数,总不能让程序自己去猜吧。

那为什么行可以省略呢,当数组具体的数据确认和列确实时,他就会按照列去具体分有多少行假如是3列 那就这样33分 分出具体的行数

⑤二维数组的使用,跟一维数组一样,但要注意下标是从0开始的 输入输出数组也是跟一维数组一样

6.二维数组在内存中的存储

二维数组在内存中的存储跟一维数组也是差不多的,都是分配一块内存给二维数组 然后从低到高进行排序

7.数组有什么用呢?

数组的引入,让我们存储数据变得十分的方便,再也不用去一个个创建变量去存储,这样不仅能够加快写代码的效率,还简洁了代码。但我们也要注意数组的越界,避免造成一些运行的错误

结尾

到这里,数组的基本内容也都讲完了,这块内容我们理清楚,为后面的内容打好基础。还请各位看客们用你们发财的小手点赞关注收藏,下一期 我将梳理C语言重量级选手:函数 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值