C语言—数组

1. 数组的概念

数组是⼀组相同类型元素的集合:数组中存放的是1个或者多个数据,但是数组元素个数不能为0; 数组中存放的多个数据,类型是相同的.

2. ⼀维数组的创建和初始化

2.1 数组创建

格式:

存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。

type 指定的是数组中存放数据的类型,可以是: char、short、int、float 等,也可以⾃ 定义的类型;

arr_name 指的是数组名的名字;

[] 中的常量值是⽤来指定数组的⼤⼩的,数组的⼤⼩根据实际的需求指定;

创建:假设需要存放40位同学的语文成绩,可以如下创建

根据需求还可以创建不同类型的数组:

2.2 数组的初始化

在数组创建的同时,给数组中的元素赋值的过程是数组的初始化,通常使用大括号{ }将数组元素存放,并用逗号隔开,如下:

数组在初始化的过程可以是完全初始化,也可以是部分初始化,但是初始化的个数不能超过数组的元素个数,不然会出现越界:

2.3 数组的类型

数组的类型是去掉数组名后,剩下的部分就是数组的类型,数组名前的类型代表但是数组元素的类型,数组的类型表示数组中存在多少元素,每个元素是什么样的类型:

以上数组的数组类型分别是:int [10]   char[20]   float[40]

3. ⼀维数组的使⽤

3.1 数组下标

C语言规定数组的下标是从0开始的,如果这个数组有N个元素,则第N个元素的下标为N-1:

C语⾔中数组的访问提供了⼀个操作符 [] ,这个操作符叫:下标引⽤操作符。 有了下标访问操作符,就可以轻松的访问到数组的元素,⽐如我们访问下标为7的元素,就可以使⽤ arr[7] ,想要访问下标是3的元素,就可以使⽤ arr[3] ,如下代码:

3.2 数组元素的打印

如果想输出数组的所有元素都输出打印,可以借助循环和[](下标引用操作符)访问数组的元素,并输出打印:

3.3 数组的输⼊

数组的使用,可以先创建,后续根据需求再将对应的元素数据存放在数组,然后再将元素输出打印,数组的输入可以使用scanf函数.

例:将五名补考同学的成绩存放在一个数组中,输出打印该数组;

4. ⼀维数组在内存中的存储

数据的存储需要向内存申请空间,并使用该内存,那么数组在内存的存储是怎么样的?

可以将数组的地址打印输出,就可以了解数组在内存中的存储:

可以看到,每一个元素之间都相差4,代表相差4个byte(字节)的内存空间,而一个整型数据(int)的内存空间也是4个byte,说明数组在内存中的存储是连续存放的;以上地址是在VS2022X86环境下编译的16进制的书写形式,A-F表示10-15;

以上数组的存放类似如下:

5. sizeof 计算数组元素个数

sizeof 中C语⾔是⼀个关键字,是可以计算类型或者变量⼤⼩的,sizeof 也可以计算数组的⼤⼩:

以上程序输入的结果是40,计算的是数组所占的内存空间,表示40个byte(字节)

因为数组中所有元素的类型都是相同的,所以只要计算出⼀个元素所占字节的个数,数组的元素 个数就能算出来数组所占内存空间的大小,通常选择第⼀个元素算⼤⼩就可以:

6. ⼆维数组的创建

6.1 ⼆维数组的概念

前⾯了解的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元 素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称 为多维数组。

6.2 ⼆维数组的创建

格式;

type表示元素的数据类型,如:char,int ,float,double;

arr_name表示数组名;

n表示数组的行,m表示数组的列,代表这个数组是n行m列的数组;

当了解二维数组的格式后就可以创建对应的数组:

7. ⼆维数组的初始化 在创建变量或者数组的时候,给定⼀些初始值,被称为初始化。 那⼆维数组如何初始化呢?像⼀维数组⼀样,也是使⽤⼤括号初始化的。

二维数组的初始化与一维数组的初始化使用的都是大括号{}将数组元素存放,二维数组的初始化有以下几种方式:

7.1 完全初始化

7.2 不完全初始化

7.3 按照⾏初始化

7.4 初始化时省略⾏,但是不能省略列

为什么不能省略行?

第一个二维数组初始化的时候有初始化列,这是系统默认每一行有4个元素,读取1,2,3,4数据后自动换行,读取下一行元素,读取5,6,7,8,此时初始化完成,这是一个2行4列的二维数组;第二个二维数组初始化有初始化行,但未初始化列,此时系统只知道需要初始化的二维数据有两行,当不知道再读取多少个数据后换行读取下一行数据,导致编译报错,所以二维数组初始化可以省略行,当不能省略列的原因,但是建议初始化的时候将行和列都初始化;

8. ⼆维数组的使⽤

8.1 ⼆维数组的下标

C语⾔规定,⼆维数组的⾏是从0开始的,列也是从0开始的,如下所⽰:

有了下标,结合前面的【】下标引用操作符,就可以快速查找到数组中对应的元素,如,第1行第三列的元素:9

8.2 ⼆维数组的输⼊和输出

与一维数组类型,使用for循环和scanf将二维数组的内存进行输入和输出:

输出:

9. ⼆维数组在内存中的存储

想研究⼆维数组在内存中的存储⽅式,可以打印出数组所有元素的地址的。代码如下:

输出如下:

二维数组第一行有两个元素,两个元素相差4个byte(字节),而数据的类型未int,刚好也是4byte(字节),说明二维数组的第一行元素在内存中是连续存放的;第二行的也是有两个元素,相差也为4byte(字节),说明第二行也是连续存放;第一行的最后一个元素arr[0][1]与第二行第一个元素arr[1][0]相差也为4byte(字节),说明,第一行元素创建后,第二行的元素的存放在第一行元素后,因此,二维数组和一维数组一样,在内存中的存放都是连续的:

10. C99中的变⻓数组

数组⼤⼩的指定只能使⽤常量、常量表达式,或者如果我们初始化数据的话,可以省略数组⼤⼩:

C99中给⼀个变⻓数组(variable-length array,简称 VLA)的新特性,允许我们可以使⽤变量指定 数组⼤⼩。 请看下⾯的代码:

上⾯⽰例中,数组 arr 就是变⻓数组,因为它的⻓度取决于变量 n 的值,编译器没法事先确定,只 有运⾏时才能知道 n 是多少。

变⻓数组的根本特征,就是数组⻓度只有运⾏时才能确定,所以变⻓数组不能初始化。它的好处是程 序员不必在开发时,随意为数组指定⼀个估计的⻓度,程序可以在运⾏时为数组分配精确的⻓度。有 ⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。数组的⼤⼩⼀旦确定就不能再变化了。

在VS2022上,虽然⽀持⼤部分C99的语法,默认没有⽀持C99中的变⻓数组,但是如果想在VS20022环境下使用还是可以的,但是需要下载相应的插件,以下为介绍:

打开VS创建好项目后:

打开属性页面:

此时编译的变长数组未报错:

变长数组的使用:与一维数组和二维数组的使用是一样的,变长数组在程序运行时才确认数组的大小,在使用时需要想输入变量:

输出结果:

二维数组对于变成数组的使用类似,都是在程序远行时确定号变量后再对数组进行使用:

输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值