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数组下标
数组 | 1 | 2 | 3 | 4 | 5 | 6 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 |
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♪(・ω・)ノ。