C语言—数组(对数组有深度的理解)

1.数组的概念

数组是一组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:

1.数组中存放的是1个或者多个数据,但是数组元素个数不能为0。

2.数组中存放的多个数据,类型是相同的。

数组分为一堆数组和多维数组,多维数组一般比较多见的是二维数组。

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

2.1数组创建

//   type arr_name[常量值];

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

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

2.arr_name指的是数组名的名字,这个名字根据实际情况,起的有意义就行。

例:创建存储某个班级的20人的数学成绩,那我们就可以创建一个数组,如下:

 

2.2 数组的初始化

有时候,数组在创建的时候,我们需要给定一些初始值,这种就称为初始化。

那数组该如何初始化呢?数组的初始化一般使用大括号,将数据放在大括号中。

2.3 数组的类型

数组也是有类型的,数组算是一种自定义类型,其实和数据类型定义差不多。

3.一维数组的使用

一维数组只要是用来对数据的存储

3.1数组下标

数组123456
下标012345

C语言规定数组是有下标的,从0开始。假设数组名为arr,那么arr[0]=1,arr[1]=2,这样就可以在后续操作中访问数组中的元素。

注:[]这个玩意叫下标引用操作符

3.2 数组地址打印

在X64环境下,地址是64bit位的,所以地址比较长。

X86就是32bit位的,地址就短一些,可以自行测试。

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

由3.2图可以知道,因为arr类型是int,占4个字节,通过观察每个元素的地址编号,不难发现,相互差4。因此我们可以得出结论:数组在内存中是连续存储的。这里为后期—指针篇—用指针访问数组打下基础。

5.sizeof计算数组元素个数

在遍历数组的时候,我们经常想知道数组的元素个数,那C语言中有办法使用程序计算数组元素个数吗?此时就可以使用sizeof运算符。

sizeof是C语言中的一个关键字,是可以计算类似或者变量大小的,其实sizeof也可以计算数组的大小。

例:

注:X64环境最好用zd%,X86环境用%d不报警告。

6.二维数组的创建

6.1二维数组的概念

前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组

6.2二维数组的创建

和一维数组类似。

例:int arr[3][4];   表示构建一个三行四列的一个二维数组。

7.二维数组的初始化

不完全初始化:int data1[3][5]={1,2,3,4,5,6,8};    后面自动补0

完全初始化: 就写15个数字就ok。

行初始化:int arr[3][5]={{1,2},{3,4},{5,6}};

注:初始化时。可以省略“行”,但是不能省略“列”。

8.二维数组的使用

其实和一维数组一样,行列的下标都是从0开始。

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

在之前的博客中写过,全局变量(静态区)和局部变量(栈区)的存储位置。

从输出的结果来看,每一行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元素之间也是差4个字节,所以二维数组中的每个元素都是连续存放的。

10.C99中的变长数组

在C语言的C99标准之前,数组个数的指定只能用常量、常量表达式。

例:int arr1[10];

在C语言的C99标准之后,数组个数的指定就可以使用变量了,这个玩意叫变长数组(variable-length array,简称VLA)

例:int n=a+b;

       int arr2[n];

注:VS2022不支持变长数组,devC++和小熊猫C++中使用的集成开发环境是gcc,它支持。

vscode(编辑器,有插件)的集成开发环境是在自己配置的时候确定的,看你的选择了,所以不确定能不能支持。

注:变长指的是程序员可以在程序运行的时候给这个数组赋一个值,而且变长数组不能赋初值。

11.数组练习

题目一:

题目二:

作者自述:本文主要针对C语言的一些初级概念,对此作一个简单介绍。本文制作不易,求求动动你们发财的小手点个赞和关注,这是对我创造最大的动力。后续我也会跟进内容,尽量一周至少一次,保证内容的质量。如果有想知道的内容或者有建议的地方,欢迎后台私信或者在本文留言哦。感谢各位的支持捏Thanks♪(・ω・)ノ。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值